2010-12-07 38 views
2

Compte tenu du répertoire suivant:modèle Django include/étendre avec des sous-répertoires

|- basic.html 
|- nav.html 
|- folder1/ 
|- |- page.html 
\- \- nav.html 

page.html étend ../basic.html qui comprend nav.html

Dans ce cas, c'est le folder1/nav.html qui sera inclus. Si j'enlève folder1/nav.html, rien n'est inclus. Comment puis-je réparer ça? Je pourrais inscrire nav.html dans basic.html, mais il pourrait y avoir des situations sur la route où je veux avoir basic.html certains comprend.

edit: L'idée est que tout ce qui a hérité de basic.html obtiendrait le template nav.html toplevel, mais cela ne semble pas être le cas, car la directive include nav.html est évaluée dans le répertoire courant de n'importe quel modèle.

+0

pouvez-vous commenter pourquoi vous voulez supprimer folder1/nav.html? il semblerait que vous corrigiez simplement basic.html si vous deviez supprimer un fichier qu'il inclut. bien sûr, je comprends que vous avez votre propre situation, mais je vais être ce type qui dit qu'il pourrait y avoir une façon différente de l'aborder. – munchybunch

+0

Il semble que le seul moyen est d'inclure directement le contenu de nav.html dans basic.html, ce qui fonctionne, mais je préfère le garder séparé - des raisons purement esthétiques, bien sûr. – decitrig

Répondre

0

Je ne sais pas si je reçois tout correctement, mais je pense que vous devez joindre le include avec un block?

basic.html:

... 
{% block navigation %} 
{% include "nav.html" %} 
{% endblock %} 

page.html:

{% extends "../basic.html" %} 
{% block navigation %} 
{% include "folder1/nav.html" %} 
{% endblock %} 

Si vous ne remplacez pas le bloc de navigation page.html l'inclure original doit être utilisé ...

+0

Cela semble fonctionner, mais le fait est que je ne veux pas que page.html ait à surcharger le 'block navigation' à moins qu'il n'ait besoin d'afficher des données différentes. – decitrig

+0

Quelle est la mauvaise chose à propos de contourner le bloc? –

+0

Cela ne semble pas fonctionner - le problème est que la directive 'include' est évaluée dans le répertoire courant de page.html, plutôt que là où le bloc a été défini. – decitrig