Gördüğüm jpwatts ' 110J ' ın, nivhab 'ın & Marcus Whybrow ' ın cevabı, ama hepsi bir şey olmaması gibi görünüyor: Ne kökü yolu hakkında? Neden her zaman aktif?
Bu yüzden başka bir yolu daha kolay hale getirdim, bu da "denetleyicinin" kendi başına karar vermesini ve büyük sorunların çoğunu çözdüğünü düşünüyorum.
İşte benim özel etiketim:
## myapp_tags.py
@register.simple_tag
def nav_css_class(page_class):
if not page_class:
return ""
else:
return page_class
Daha sonra, "denetleyici" gerekli CSS sınıflarını bildirir (aslında, en önemlisi, varlığını şablona bildirmesidir)
## views.py
def ping(request):
context={}
context["nav_ping"] = "active"
return render(request, 'myapp/ping.html',context)
Ve son olarak, onu gezinme çubuğumda oluşturuyorum
<!-- 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>
...
Bu nedenle, her sayfanın nav_css_classayarlanacak kendi değeri vardır ve ayarlanırsa, şablon etkin hale gelir: requestşablon bağlamında gerek yok, URL ayrıştırma yok ve çoklu URL sayfaları veya kök sayfasıyla ilgili daha fazla sorun yok.
<a href="{% url "view:name" %}" {% active_class "view:name" %}>. İsteğe bağlı oluşturmak için kullanabilirsiniz sadece" active"(ileterek değeriFalsevar olan bir sınıf özniteliği için eklerine etikete ikinci argüman olarak), ancak çoğu nav bağlantıları için örnek kullandığım ne olduğunu.