Я бачив 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якості другого аргументу тега) для додавання до існуючого атрибуту класу, але для більшості навігаційних посилань, наприклад , що я використовую.