Tôi đã xem jpwatts ', 110j ' s, nivhab 's & Marcus Whybrow câu trả lời của , nhưng tất cả chúng dường như thiếu một thứ: còn đường dẫn gốc thì sao? Tại sao nó luôn hoạt động?
Vì vậy, tôi đã thực hiện một cách khác, dễ dàng hơn, khiến "bộ điều khiển" tự quyết định và tôi nghĩ nó giải quyết hầu hết các vấn đề lớn.
Đây là thẻ tùy chỉnh của tôi:
## myapp_tags.py
@register.simple_tag
def nav_css_class(page_class):
if not page_class:
return ""
else:
return page_class
Sau đó, "controller" khai báo các lớp CSS cần thiết (trên thực tế, điều quan trọng nhất là nó khai báo sự hiện diện của nó với mẫu)
## views.py
def ping(request):
context={}
context["nav_ping"] = "active"
return render(request, 'myapp/ping.html',context)
Và cuối cùng, tôi kết xuất nó trong thanh điều hướng của mình:
<!-- 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>
...
Vì vậy, mỗi trang có nav_css_class
giá trị riêng để đặt và nếu được đặt, mẫu sẽ hoạt động: không cần request
trong ngữ cảnh mẫu, không phân vùng URL và không còn vấn đề gì về các trang nhiều URL hoặc trang gốc.
<a href="{% url "view:name" %}" {% active_class "view:name" %}>
. Bạn có thể tùy chọn sử dụng nó để tạo ra chỉ các" active"
giá trị (bằng cách đi quaFalse
như một cuộc tranh luận thứ hai để tag) để append đến một thuộc tính lớp hiện có, nhưng đối với hầu hết các liên kết nav rằng ví dụ là những gì tôi sử dụng.