我已賈勒特哈迪的「低技術」的做法類似的,呃...上下文(是的,這是一個雙關語......這不會使絕對意義上你,除非我告訴你,我沒有做導航,但設置了按鈕的邊框顏色以顯示哪個按鈕被按下)。
但我認爲我的版本更緊湊。我不是隻在視圖中定義一個簡單的上下文變量activebar,而是返回一個字典,但始終只有一個鍵值對:例如activebar = {'foo':'active'}。
然後在模板中,我簡單地在foo錨點中寫入class =「{{activebar.foo}}」,並相應地在其他錨點中寫入class =「{{activebar.foo}}」。如果只有activebar.foo被定義爲具有「active」值,那麼bar錨點中的activebar.bar將不會執行任何操作。也許「默默地失敗」是恰當的Django談話。鮑勃是你的叔叔。
編輯︰哎呀......一兩天過去了,雖然我上面寫的東西確實爲我工作的問題出現了,當我把一個新的窗口作爲目標放入導航欄的錨點。這似乎是一個奇怪的故障的原因:在點擊新窗口(Firefox中的選項卡),然後返回到啓動新窗口的那個窗口後,當我快速移動窗口時,導航欄下面的部分顯示爲空白光標在導航欄上的項目---沒有點擊任何東西。我不得不通過移動滾動條來強制屏幕重繪(不是頁面重新加載,儘管這也起作用,因爲它涉及屏幕重繪)。
我太過分了,不知道爲什麼可能會發生。而且有可能我做了一些其他的事情,導致不知怎麼的事情消失了。但是...我發現了一個更簡單的方法,對我來說非常合適。我的情況是,從視圖中啓動的每個子模板都應該使關聯的導航欄項目顯示爲「活動」。事實上,那個navbar項目是啓動了啓動子模板的視圖 - 通常的交易。
我的解決方案---讓我們以「登錄」導航欄項爲例---將其放入包含登錄窗體的子模板中。
{% block login %}active{% endblock %}
我把它放在標題欄下面,但我不認爲這個位置是重要的。然後,在包含導航欄定義,圍繞在登錄導航欄項目,我把錨...好LI標記,這裏的父模板的代碼:
<li class="{% block login %}{% endblock %}"><a href="/mysite/login">Login</a></li>
因此,當子模板被渲染的父母會將登錄導航欄項目顯示爲活動狀態,而Bob仍然是您的叔叔。
我上面描述的字典方法是顯示哪一行按鈕被按下,當它們都在同一個子模板上時。這仍然適用於我,因爲只涉及一個兒童模板,我不明白我的新的navbars方法在這種情況下會如何工作。請注意,使用navbars視圖的新方法甚至不涉及。簡單!
你檢查了嗎? http://stackoverflow.com/questions/1024168/django-is-there-a-better-way-to-bold-the-current-page-link – rinti
該CSS解決方案看起來很難維護,並需要添加信息在3個不同的地方。 – Boris