Django : utiliser des templates ayant le même nom dans plusieurs applications

Le problème est simple : vous avez dans le même projet deux applications disons app1 et app2 qui ont toutes les deux un même template nommé index.html. Pour éviter que Django n’effectue une confusion entre les deux templates au moment du chargement, il est nécessaire de respecter une marche à suivre bien précise.

Lieu de stockage des templates

Surtout pas (ce qui pourrait paraître logique), /mon_projet/app1/templates/index.html et /mon_projet/app2/templates/index.html. Si vous le faites vous risquez de charger le fichier index.html de app1 lorsque vous appelez app2.

Vous avez le choix :

  • dans /mon_projet/app1/templates/app1/index.html (idem pour app2 évidemment).
  • dans /mon_projet/templates/app1/index.html (idem pour app2).

Personnellement je préfère la deuxième solution car le chemin est moins compliqué.

Configuration du fichier settings.py

  • Au niveau de la variable TEMPLATE_LOADERS, vous devez avoir la ligne suivante :
    'django.template.loaders.filesystem.Loader'
  • Au niveau de la variable TEMPLATE_DIRS, les chemins d’accès aux templates doivent être déclarés :
    Si vous avez choisi la première option pour le stockage des templates :
    os.path.join(ROOT, "app1/templates"),
    os.path.join(ROOT, "app2/templates"),

    Si vous avez choisi la seconde option :
    os.path.join(ROOT, "templates"),
    Ceci suppose que vous avez déclaré en début de fichier :
    ROOT = os.path.dirname(os.path.abspath(__file__))

Chargement des templates

Lors du chargement des templates, il faut préciser le nom de l’application : app1/index.html et app2/index.html

Vus : 698
Publié par Marco : 47