2015-10-04 27 views
2

我有一大堆的鏈接在我的導航欄上引導上引導有源標籤和Django

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

說我是「家庭」一節,我要加上一個Django的文本<li class="active">

我的第一直覺是使用上下文變量views.py,並完成類似

context = { 'section' : 'home' } 

,然後執行字符串

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

對我的匹配,這似乎違反幹,所以我問了社區,如果有代表這是一個更時尚的方式?

+0

https://stackoverflow.com/questions/30034107/django-along-with-bootstrap-navbar-distiinguishing-link-to-current-page – surfer190

回答

1

我寧願檢查URL模板:

<li {% if "/" == request.path %}class="active"{% endif %}><a href="{% url 'home' %}">Home</a></li> 
<li {% if 'mypage1' in request.path %}class="active"{% endif %}><a href="{% url 'my_page_1' %}">My Page 1</a></li> 
+0

看起來這是做到這一點的唯一途徑......這樣做,用的'template.html'文件的通用方法沒有辦法。 – bryansis2010

+0

是的,我不喜歡它,是因爲有一個機會,對你的檢查字符串出現在另一個URL,你會得到兩個活動菜單項(儘管它不太可能)。這是我所能做的到現在爲止最好的:) – nima

+0

事實真的是** **最好的方法是什麼?似乎應該有一個更清潔的方式。 – Jarad

1

接受的答案是不完美的,乾燥。

<li {% if 'mypage1' in request.path %}class="active"{% endif %}><a href="{% url 'my_page_1' %}">My Page 1</a></li> 

如果更改網址,那麼您每次都必須在此更改它。如果你忘了這麼做呢?

,如果你有什麼用URL「my_page_1」,例如,「127.0.0.7/my_page_2/list/my_my_page_1」多個網址。但我們只需要「127.0.0.7/my_my_page_1」。在這種情況下,這兩個網址都將處於活動狀態。我們不希望出現這種情況

您可以檢查URL中使用request.resolver_match.url_name,而不是匹配。

<li class="nav-item {% if request.resolver_match.url_name == 'index' %}active{% endif %}"> 

{% with url_name=request.resolver_match.url_name %} 
<li class="nav-item {% if url_name == 'index' %}active{% endif %}" 
    <a href="{% url 'index' %}" >Home </a> 
</li> 

{% endwith %}