我想突出顯示導航菜單中的當前頁面。當你在他們的頁面上時,顯然我需要給菜單鏈接一個類似'active'的類。這是一個經典問題,我見過很多解決方案proposed。我的問題是我討厭所有的人,並認爲他們都不是非常乾的。例如:爲什麼我必須在所有的響應中傳遞RequestContext?
@register.simple_tag
def active(request, pattern):
import re
if re.search(pattern, request.path):
return 'active'
return ''
----
{% load tags %}
<div id="navigation">
<a class="{% active request "^/about/" %}" href="/about/">About</a>
<a class="{% active request "^/contact/" %}" href="/contact/">Contact</a>
<a class="{% active request "^/services/" %}" href="/services/">Services</a>
</div>
該標籤採用當前的請求和URL表達式返回「積極的」,如果你當前訪問此頁面。或者,這可以通過命名視圖而不是url來完成,但原理是相同的。
我對這個主要問題是,我的導航將在我的意見99%,被稱爲然而,爲了得到當前請求的變量還是有解析的RequestContext的模板,是這樣的:
def contact(request):
# snip ...
return render_to_response(
'contact.html',
{ 'myvar' : myvar },
context_instance=RequestContext(request))
爲什麼我需要這個context_instance行添加到時候可能我的看法每一個所有,但其中一個需要爲了得到當前URL /視圖突出活動鏈接請求變量?這似乎非常潮溼,特別是對於絕大多數django站點中的功能。我希望默認包含請求,並能夠選擇性地禁止它。我找不到在中間件中執行此操作的方法,因爲在視圖返回後,無法攔截模板。
有什麼建議嗎?
使用body ID命名頁面是個不錯的主意,但body標籤和導航都位於基本模板中。我可以阻止它並向每個擴展模板添加* {%block body_id%}我的頁面{%endblock%} *,但是再次,DRY在哪裏?有什麼辦法可以自動化嗎? 我想要或者使用命名的視圖作爲身體ID或slugify它或某事,而不必明確命名它,並且必須爲每個視圖維護兩個單獨的「名稱」:一個視圖本身和一個css id。 – Jimmy 2009-06-27 07:49:58
我的Django-fu是生鏽的,但不是改變每個擴展模板,你可以傳遞來自contact()和family的CSS名稱:def contact(request):render_to_response('contact.html',{'cssClass':' contact-page','myvar':myvar},...)?仍然不完美幹,但不壞。 – RichieHindle 2009-06-27 08:16:20