Django: spécifier un template de base par répertoire
Je travaille sur un site Django qui dispose de plusieurs sections et sous-sections. J'aimerais avoir plusieurs profondeurs de l'héritage de template: un template de base pour l'ensemble du site, un modèle de base pour chaque section, qui hérite de la racine du template de base, et ainsi de suite. Voici une version simplifiée de mon répertoire souhaité structure:
base.html
section1/
base.html
section2/
base.html
section3/
base.html
Ce que je désire est pour tous les fichiers sous section1/
à contenir quelque chose comme {% extends "base.html" %}
ce qui signifie qu'ils étendent section1/base.html
. section1/base.html
devrait contenir quelque chose comme {% extends "../base.html" %}
en ce sens qu'elle permettrait d'étendre le niveau de la racine du fichier de base. Cependant, je ne pouvais pas trouver quoi que ce soit dans la documentation, ce qui suggère que cela a été possible, et je n'arrivais pas à Django de distinguer entre "../base.html"
et "base.html"
. ({% extends "../base.html" %}
renvoie une erreur.) Je suppose qu'une solution de contournement serait de renommer tous les fichiers de base base_SECTIONNAME.html
et de mettre à jour tous les fichiers qui héritent d'eux, mais je crains que cela peut devenir difficile à maintenir que mon site devient plus grand et des sections changer de noms, etc. Je préfère une solution qui prend avantage de la hiérarchie naturelle spécifié par les répertoires et sous-répertoires.
Des idées?
source d'informationauteur RexE
Vous devez vous connecter pour publier un commentaire.
Peut-être que je supervise quelque chose, mais tout ce que vous voulez peut être accompli avec le système de template de django. Tous étend les appels sont par rapport à un modèle répertoires.
Dans l'ordre pour tous base.html fichiers des sous-répertoires pour étendre base.html, vous avez juste à mettre un
{% extends "base.html" %}
dans les fichiers. section1/base.html allait ressembler à ça.{% extends "base.html" %}
{# ... rest of your code ...#}
Maintenant, pour obtenir les fichiers de section1 d'étendre section1/base.html vous avez juste à mettre
{% extends "section1/base.html" %}
au dessus d'eux. De même pour section2, section3 et ainsi de suite.C'est aussi simple que cela, mais pas tout à fait évident dans la documentation.
Je l'espère, j'ai bien compris votre question.
La accepté de répondre à fonctionner, mais je ne vous recommandons d'utiliser des noms de variables pour garder une trace de la section de la structure. Ma préférence personnelle serait un contexte du processeur. Si, par exemple, de la section du site de l'organisation est transparente reflète dans l'url, essayez quelque chose comme:
Puis dans votre modèle, il suffit d'appeler
Il y a probablement une douzaine d'autres façons de le faire, mais la chose principale est de penser sur la façon d'éviter de coder en dur le nom du dossier dans le modèle. Ainsi, vous obtenez beaucoup de kilométrage, en particulier depuis, vous pouvez simplement faire glisser et déposer modèle entre les sections, si ils arrivent à être assez similaire. Une autre chose que vous pourriez ajouter insérer est:
Le bel avantage de cette stratégie est bien sûr que vous pouvez obtenir une mouche-poids de l'article et en cours d'exécution, sans local de la base de modèle à tous.
Vous pouvez utiliser cette bibliothèque: https://github.com/vb64/django.templates.relative.path
Il suffit d'écrire dans vos modèles comme suit:
{% load relative_path %}
{% extends ".base.html" %}
cela permettra d'étendre le modèle "base.html" situé dans le même dossier où votre modèle placé
{% load relative_path %}
{% extends "...base.html" %}
étendre le modèle "base.html" situé à deux niveaux plus élevés
même chose travaille avec "include" de la balise.