Lors de la configuration de mon projet et de la conservation des applications non dépendantes, j'ai rencontré un problème. J'aimerais que tous les modèles des différentes applications aient un en-tête et un pied de page cohérents. Voici ce que j'essaie:
myproject/
base/
templates/
header.html
footer.html
app1/
templates/
my_app1_page.html -> want to include 'header.html'
and 'footer.html' from base app
Imaginez qu'il existe de nombreuses autres applications qui souhaitent également le faire. Est-ce possible et/ou la bonne façon de le faire?
Tant que les applications sont dans INSTALLED_APPS et que le chargeur de modèles pour les répertoires des applications est activé, vous pouvez inclure n'importe quel modèle d'une autre application, à savoir:
{% include "header.html" %}
... puisque vos modèles se trouvent directement dans le répertoire des modèles de votre application. En règle générale, afin d'éviter les conflits de noms, il est préférable d'utiliser:
app1/
templates/
app1/
page1.html
page2.html
app2/
templates/
app2/
page1.html
page2.html
Et {% include "app1/page1.html" %}
ou {% include "app2/page1.html" %}
...
Mais: pour conserver une apparence cohérente, il est tellement préférable d'utiliser l'héritage de modèle plutôt que l'inclusion. L'héritage des modèles est l'un des vraiment de bonnes choses du système de modèles Django, choisissez l'héritage plutôt que l'inclusion chaque fois que cela a du sens (la plupart du temps).
Mes recommandations:
{%block content%}
pour votre contenu principal.{% extends "base.html" %}
et remplacer la section de contenuVoir une autre réponse à cette question pour les liens vers le doc
Bien que vous puissiez certainement le faire en utilisant include tag et en spécifiant des chemins absolus, la bonne façon de travailler dans Django est d'utiliser héritage de modèle =.