2012-03-16 60 views
1

鏈接在我django應用程序的index.html(我認爲作爲網站的home page)我給的鏈接發送至不同地點的用戶到達的地點之一,他應該在website.When找到一個鏈接,回到主頁。所以我創建了一個base.html被所有頁面繼承,包括index.html。在base.html中,我提供了這些鏈接。如果模板狀態顯示在Django

base.html文件

... 
<a href="{%url archives %}"> Archives </a> 
<br/> 
<a href="{% url reports %}"> Reports </a> 
<br/> 
<a href="{% url home %}"> Home </a> 
<br/> 
.. 

我的問題是,當我索引頁(家)上,我不想顯示主link.Is這個可能在模板中這樣做,使用{% if %}的條件? 目前我沒有傳遞任何參數,在視圖中

@login_required 
def index(request, template_name): 
    print 'index()::template=',template_name 
    return custom_render(request, {},template_name) 

def custom_render(request,context,template): 
    req_context=RequestContext(request,context) 
    return render_to_response(template,req_context) 

回答

3

首先,你可以使用django render shortcut,以避免使用囉嗦custom_render

from django.shortcuts import render 
@login_required 
def index(request, template_name): 
    return render(request, template_name,extra={}) 

你可以厚臉皮,在你base.html做這樣的事情:

{% url home as home_url %} 
{% if request.path != home_url %}<a href="{{ home_url }}">Home</a>{% endif %} 

快速檢查,如果當前頁面爲主頁。

如果將來可能會變得更加複雜,您可以使用模板標籤來檢查您所在的當前網址是否與另一個網址匹配。這裏是我以前用過的模板標籤來檢查菜單鏈接是當前活動:

https://gist.github.com/2049936

+1

我相信OP想要的是'{%if request.path' **!= **'home_url%}' – egor83 2012-03-16 12:47:10

+0

哦,是的,好點 - 我已經更新了答案 – 2012-03-16 12:53:28

+0

聽起來像是一個很好的方法來做到這一點..會嘗試 – 2012-03-16 12:56:07

1

這不正是你問什麼,而是alteratively辦法做到這一點,我往往更喜歡是使用JavaScript來隱藏或更改當前頁面鏈接的顏色。例如,如果你使用jQuery:

// Assumes relative paths in a elements 
$('a[href="' + window.location.pathname + '"]').each(function (index, element) { 
    $(element).addClass('someClass'); 
}); 

someClass可能是一個CSS規則,該元素的「顯示」屬性設置爲「無」,或簡單地使鏈接看起來像純文本,並且表現像鼠標移動或點擊時的純文本一樣。

這有兩個可能的優點:

  • 它阻止你的模板變得過於錯綜複雜,和難以維持,如果你開始隨意添加導航元素
  • 你必須保持你的資產淨值保持一致的能力在我看來,這是一個很好的設計決定

這不是銀彈,但我認爲重要的是要認識到,有時候這些事情不一定是模板中最好的。我首先想到我的django模板,作爲構建數據的一種方式。他們總會有一些演示元素,但我儘可能地去除這些元素。其他人會不同意。