Saya telah melihat jawaban jpwatts ', 110j , nivhab & Marcus Whybrow , tetapi semuanya tampaknya kurang dalam sesuatu: bagaimana dengan jalur root? Kenapa selalu aktif?
Jadi saya telah membuat cara lain, lebih mudah, yang membuat "pengontrol" memutuskan dengan sendirinya dan menurut saya cara ini menyelesaikan sebagian besar masalah besar.
Ini tag kustom saya:
## myapp_tags.py
@register.simple_tag
def nav_css_class(page_class):
if not page_class:
return ""
else:
return page_class
Kemudian, "controller" mendeklarasikan class CSS yang dibutuhkan (sebenarnya, yang paling penting adalah mendeklarasikan keberadaannya ke template)
## views.py
def ping(request):
context={}
context["nav_ping"] = "active"
return render(request, 'myapp/ping.html',context)
Dan akhirnya, saya merendernya di bilah navigasi saya:
<!-- 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>
...
Jadi setiap halaman memiliki nilainya sendiri nav_css_classuntuk disetel, dan jika disetel, templat akan merender aktif: tidak perlu requestdalam konteks templat, tidak ada pengupasan URL dan tidak ada lagi masalah tentang halaman multi-URL atau halaman root.
<a href="{% url "view:name" %}" {% active_class "view:name" %}>. Anda dapat menggunakannya untuk menghasilkan hanya satu" active"nilai (dengan melewatiFalsesebagai argumen kedua untuk tag) untuk append ke atribut kelas yang ada, tetapi untuk sebagian besar link nav bahwa contoh adalah apa yang saya gunakan.