2014-02-26 12 views
13

考慮這個基本菜單:Django的動態獲取視圖的URL,並檢查其當前頁面

<ul class="nav navbar-nav"> 
    <li class="active"><a href="{% url 'home' %}">Home</a></li> 
    <li><a href="{% url 'about' %}">About</a></li> 
</ul> 

我試圖給當前頁面的鏈接的活動類,我想這樣做動態的基礎上當前網址和視圖的網址。因此,當用戶訪問關於頁面時,該頁面現在具有活動類別,而主頁不具有活動類別。

我想的邏輯是這樣的<li></li>標籤內的工作:

{% if request.get_full_path = "{% url 'home' %}" %}class="active"{% endif %} 
{% if request.get_full_path = "{% url 'about' %}" %}class="active"{% endif %} 

但顯然我不能有嵌套彼此內部的兩個{% ... %}

有關如何避免嵌套兩者的任何想法?

+0

不是簡單地'request.get_full_path = url'home''工作嗎? – njzk2

+0

@ njzk2它在'if expression'錯誤結束時給出'Unused''home''。糟糕的是,這將是很好,整潔。 – agconti

+1

http://stackoverflow.com/questions/340888/navigation-in-django應該有所幫助。 – alecxe

回答

31

我通常在我的導航中使用模板繼承,類似於answer alecxe linked to。但是,正如您正在嘗試的那樣,可以比較使用if標記中的當前URL。

url標籤允許您將結果保存到變量。然後,您可以在if標籤中使用該變量。

{% url 'home' as home_url %} 
{% if request.get_full_path == home_url %}class="active"{% endif %} 
+0

此解決方案更乾燥。謝謝! – agconti

+1

這種方法的另一個優點是,當你創建一個鏈接時,你需要'home_url',所以實際上唯一的額外的東西就是'request.get_full_path'上的'if'。順便說一句,爲此,你需要添加'request'到你的模板上下文變量,當然你可以把它作爲默認的上下文變量。 – rednaw