2017-09-18 1 views
1

J'essaie de ne pas écrire deux fois le même code sur des modèles différents. Vraie tracas lorsque vous changez quelque chose. Donc, quand je vais à une section de la page Web, je veux afficher un menu latéral. Ce menu latéral est supposé être sur plusieurs modèles. Comme index.html, detail.html, manage.html et ainsi de suite.Inclure un menu à plusieurs modèles dans Django

Mais la section est seulement une partie de la page Web, donc je ne peux pas l'avoir dans base.html.

Je pensais utiliser include. Mais puisque le menu latéral dépend des requêtes DB à générer, je dois alors faire des requêtes pour chaque vue. Ce qui rend également le code redondant.

Quelle est la meilleure pratique pour cette fonctionnalité?

À la votre!

Répondre

5

Vous pouvez écrire sur mesure inclusion_tag, qui est plus facile pour le scénario:

my_app/templatetags/my_app_tags.py

from django import template 

register = template.Library() 

@register.inclusion_tag('side_menu.html') 
def side_menu(*args, **kwargs): 
    # prepare context here for `side_menu.html` 
    ctx = {} 
    return ctx 

ensuite dans un modèle que vous souhaitez inclure le menu latéral procédez comme suit:

{% load side_menu from my_app_tags %} 

{% side_menu %}