Modèles Django: le remplacement des blocs d'enfants inclus des modèles par le biais d'un modèle étendue

Je me demandais si quelqu'un sait comment traiter avec les éléments suivants décalé à la structure du modèle:

### 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>

Et, au cœur de la question:


### 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 %}

Le problème est lors de l'extension d'un modèle vous pouvez remplacez uniquement les blocs déclaré dans le parent seul, pas un de ses enfants.

Je suppose que je pourrais faire base.html une enveloppe de vides inutilisés des blocs imbriqués couvrant toutes les éventualités futures, mais dirais même que remplacer correctement? Et est-ce le seul moyen?

Si vous vous demandez pourquoi j'ai une bi-directionnelle include/s'étend de flux de travail autour de base.html j'ai de nombreux sous-modèles que je veux habituer tous à travers le projet: en-Têtes, pieds de page, des trajets, des encadrés, etc. Ils seront tous être conforme à la structure de l'ensemble du site, mais dans de nombreux cas, l'ensemble de la subdivision du site auront besoin que de quelques-uns de ces sous-modèles. Mon idée était de définir les sous-modèles sous les modèles/dossier de base, et ont templates/base-type1.html, templates/base-type2.html, etc, à s'étendre dans d'autres endroits. Chaque type de référence uniquement à la sous-modèles nécessaires, et de les remplacer à la place du contenu au besoin.

  • Eh bien, après la publication, je vois cette question pop-up dans la barre latérale, même après une recherche approfondie de débordement de pile et une recherche sur google. Je comprends la mécanique de cette limitation dans django, mais l'homme, les conséquences sont déprimants.
  • Totalement essayé de poster cela comme une réponse, mais ma nouvelle pile en compte le manque de rep... Oublié.
  • Pour les futurs inventeurs: le question susmentionnée a une base de code de l'échantillon quelques réponses démontrant @Marcin est utile de stratégie.
  • Semble que ma stratégie de remplacement de la définition de tous les blocs à l'avance base.html ne fonctionne pas, soit.
InformationsquelleAutor Chris Keele | 2012-04-03