J'ai vu les réponses de jpwatts , 110j , nivhab et Marcus Whybrow , mais elles semblent toutes manquer de quelque chose: qu'en est-il du chemin racine? Pourquoi est-ce toujours actif?
J'ai donc fait un autre moyen, plus facile, qui fait que le "contrôleur" décide par lui-même et je pense que cela résout la plupart des gros problèmes.
Voici mon tag personnalisé:
## myapp_tags.py
@register.simple_tag
def nav_css_class(page_class):
if not page_class:
return ""
else:
return page_class
Ensuite, le "contrôleur" déclare les classes CSS nécessaires (en fait, le plus important est qu'il déclare sa présence au modèle)
## views.py
def ping(request):
context={}
context["nav_ping"] = "active"
return render(request, 'myapp/ping.html',context)
Et enfin, je le rende dans ma barre de navigation:
<!-- sidebar.html -->
{% load myapp_tags %}
...
<a class="{% nav_css_class nav_home %}" href="{% url 'index' %}">
Accueil
</a>
<a class="{% nav_css_class nav_candidats %}" href="{% url 'candidats' %}">
Candidats
</a>
<a class="{% nav_css_class nav_ping %}" href="{% url 'ping' %}">
Ping
</a>
<a class="{% nav_css_class nav_stat %}" href="{% url 'statistiques' %}">
Statistiques
</a>
...
Ainsi, chaque page a sa propre nav_css_class
valeur à définir, et si elle est définie, le modèle est rendu actif: pas besoin de request
contexte de modèle, pas de parcage d'URL et plus de problèmes de pages multi-URL ou de page racine.
<a href="{% url "view:name" %}" {% active_class "view:name" %}>
. Vous pouvez éventuellement l'utiliser pour générer uniquement la" active"
valeur (en la passantFalse
comme deuxième argument à la balise) à ajouter à un attribut de classe existant, mais pour la plupart des liens de navigation, cet exemple est ce que j'utilise.