1.7 KiB
1.7 KiB
Title | Date | Slug | Tags |
---|---|---|---|
Définition du lien actif avec Django et un templatetag | 2016-02-19 | django-definition-lien-actif-menu | django, templatetag, dev, web |
Pour que l'utilisateur ne se perde pas trop dans l'application, il est nécessaire qu'il ait des repères correctement définis. Que le menu principal ait toujours la même structure, et que le lien dans le menu sur lequel il vient de cliquer soit mis en gras, par exemple. Avec Django, on peut utiliser les templatetags, de la manière suivante:
- On définit un nouveau
templatetag
dans un fichiertools/menuitems.py
. Il doit prendre le contexte actuel en paramètre (takes_context=True
) et regarder si le lien qu'on lui demande de construire est identique à l'URL actuelle. - Ajoutez l'application
tools
(ou quel que soit le nom que vous lui aurez donné) dans lesINSTALLED_APPS
, dans le fichier de configuration. - Dans le template, il suffit d'importer le package défini ci-dessus et d'utiliser la nouvelle fonction lorsqu'on construit un lien.
Définition du template tag
# tools/menuitems.py
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def menuitem(context, url, title):
if context.request.path == url:
return '<li class="active"><a href="' + url + '">' + title + '</a></li>'
else:
return '<li><a href="' + url + '">' + title + '</a></li>’
Définition du template
<!-- templates/file.html -->
{% load menuitems %}
<ul>
{% menuitem '/' 'Overview' %}
{% menuitem '/gymnast/' 'Gymnasts' %}
{% menuitem '/routines/' 'Routines' %}
</ul>