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_class
untuk disetel, dan jika disetel, templat akan merender aktif: tidak perlu request
dalam 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 melewatiFalse
sebagai argumen kedua untuk tag) untuk append ke atribut kelas yang ada, tetapi untuk sebagian besar link nav bahwa contoh adalah apa yang saya gunakan.