Я бачив jpwatts ', 110j ' s, nivhab 's та Marcus Whybrow , але, здається, у них чогось не вистачає: як щодо кореневого шляху? Чому він завжди активний?
Тому я зробив інший, простіший, який змушує «контролер» вирішити сам, і я думаю, що це вирішить більшість великих проблем.
Ось мій спеціальний тег:
## myapp_tags.py
@register.simple_tag
def nav_css_class(page_class):
if not page_class:
return ""
else:
return page_class
Потім "контролер" оголошує необхідні класи CSS (насправді, найважливіше - це він заявляє про свою присутність у шаблоні)
## views.py
def ping(request):
context={}
context["nav_ping"] = "active"
return render(request, 'myapp/ping.html',context)
І нарешті, я відтворюю це у своєму навігаційному рядку:
<!-- 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>
...
Отже, для кожної сторінки є своє nav_css_class
значення для встановлення, і якщо вона встановлена, шаблон стає активним: не потрібно request
в контексті шаблону, немає розбиття URL-адрес і більше проблем щодо сторінок з кількома URL-адресами або кореневої сторінки.
<a href="{% url "view:name" %}" {% active_class "view:name" %}>
. При бажанні ви можете використовувати його для генерації тільки на" active"
значенні (шляхом передачі вFalse
якості другого аргументу тега) для додавання до існуючого атрибуту класу, але для більшості навігаційних посилань, наприклад , що я використовую.