mi chiedo se qualcuno sa come trattare con la seguente struttura modello eccentrico:Django modelli: blocchi imperativi di bambini inclusi templates attraverso un modello esteso
### base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title> {% block title %} Title of the page {% endblock %} </title>
</head>
<body>
<header>
{% block header %}
{% include "base/header.html" %}
{% endblock header %}
</header>
{% block content %}{% endblock %}
</body>
</html>
### base/header.html
<div id="menu-bar">
{% block nav %}
{% include "base/nav.html" %}
{% endblock %}
</div>
### base/nav.html
<nav id="menu">
<ul>
<li>
<a href="/profile/">My Profile</a>
</li>
<li>
<a href="/favs/">My Favorites</a>
</li>
{% block extra-content %}{% endblock %}
</ul>
</nav>
E, il nocciolo della questione:
### app/somepage.html
{% extends "base.html" %}
{% block content %}
<p>Content is overridden!</p>
{% endblock %}
{% block extra-content %}
<p>This will not show up, though...</p>
{% endblock %}
{% block nav %}
<p>Not even this.</p>
{% endblock %}
Il problema è quando si estende un modello è possibile ignorare solo i blocchi dichiarati nel genitore solo, non uno dei suoi figli.
Suppongo che potrei rendere base.html un guscio di blocchi nidificati vuoti inutilizzati che coprono tutte le contingenze future, ma anche che sovrascriverà correttamente? Ed è questo l'unico modo?
Se ti stai chiedendo perché ho un flusso di lavoro bidirezionale/esteso attorno a base.html, ho molti sotto-modelli che voglio utilizzare in tutto il progetto: Intestazioni, piè di pagina, nav, barre laterali, ecc. Saranno tutti coerenti nella struttura dell'intero sito, ma in molti casi un'intera suddivisione del sito avrà bisogno solo di alcuni di questi sotto-modelli. La mia idea era di definire i sotto-modelli sotto la cartella templates/base, e avere template/base-type1.html, templates/base-type2.html, ecc. Per estendersi in altri posti. Ogni tipo farebbe solo riferimento ai sotto-modelli necessari e li sovrascriverà per posizionare il contenuto secondo necessità.
Ebbene, dopo la pubblicazione vedo [questa domanda] (http://stackoverflow.com/questions/9034331/overwriting-a-block-within-an- incluso-template-from-an-extended-template) compare nella barra laterale, anche dopo una ricerca approfondita di overflow dello stack e googling. Capisco la meccanica di questa limitazione nel django, ma l'uomo, le implicazioni sono deprimenti. –
Totalmente provato a postare questo come una risposta, ma il mio nuovo account stack manca la risposta ... Dimenticato di questo. –
Per i cercatori futuri: la [domanda di cui sopra] (http://stackoverflow.com/questions/9034331/overwriting-a-block-within-an-included-template-from-an-extended-template) ha un esempio di codice di base alcune risposte giù dimostrando la strategia utile di @ Marcin. –