grimboite/articles/dev/2016-02-19-active-link-in-m...

1.7 KiB
Raw Blame History

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:

  1. On définit un nouveau templatetag dans un fichier tools/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.
  2. Ajoutez l'application tools (ou quel que soit le nom que vous lui aurez donné) dans les INSTALLED_APPS, dans le fichier de configuration.
  3. 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>