Widziałem jpwatts , 110j , nivhab i Marcus Whybrow , ale wydaje się, że wszystkim im czegoś brakuje: a co ze ścieżką ? Dlaczego jest zawsze aktywny?
Zrobiłem więc inny sposób, łatwiejszy, który sprawia, że „kontroler” sam decyduje i myślę, że rozwiązuje większość dużych problemów.
Oto mój niestandardowy tag:
## myapp_tags.py
@register.simple_tag
def nav_css_class(page_class):
if not page_class:
return ""
else:
return page_class
Następnie "kontroler" deklaruje potrzebne klasy CSS (tak naprawdę najważniejsze to deklaruje swoją obecność do szablonu)
## views.py
def ping(request):
context={}
context["nav_ping"] = "active"
return render(request, 'myapp/ping.html',context)
Na koniec renderuję go na pasku nawigacyjnym:
<!-- 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>
...
Tak więc każda strona ma własną nav_css_class
wartość do ustawienia, a jeśli jest ustawiona, szablon renderuje się jako aktywny: bez potrzeby request
w kontekście szablonu, bez parowania adresów URL i żadnych problemów ze stronami z wieloma adresami URL lub stroną główną.
<a href="{% url "view:name" %}" {% active_class "view:name" %}>
. Opcjonalnie można go używać do generowania tylko na" active"
wartość (przekazującFalse
jako drugi argument do znacznika) do dołączania do istniejącego atrybutu klasy, ale dla większości linków nav że przykładem jest to, co używam.