如果条件在模板中显示django中的链接

时间:2012-03-16 12:39:08

标签: python django hyperlink

在我的django应用index.html(我认为是网站的home page)中,我提供了指向网站中各个位置的链接。当用户到达其中一个位置时,他应该在那里找到一个链接,回到主页。所以我创建了一个base.html,包括index.html在内的所有网页都会继承。在base.html,我提供这些链接。

base.html文件

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

我的问题是,当我在索引页面(主页)上时,我不想显示主页链接。这是否可以在模板中使用{% 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)

2 个答案:

答案 0 :(得分: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 :(得分:1)

这不完全是你要求的,但是我通常更喜欢使用JavaScript来隐藏或更改当前页面的链接颜色。例如,如果您使用的是jQuery:

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

someClass可以是一个CSS规则,用于将该元素的'display'属性设置为'none',或简单地使链接看起来像纯文本,并且当鼠标悬停或单击时表现得像纯文本它。

这有两个可能的优点:

  • 它可以防止您的模板变得太复杂,并且如果您开始任意添加导航元素则难以维护
  • 你能够在页面之间保持导航一致,我认为这是一个很好的设计决定

这不是灵丹妙药,但我认为重要的是要认识到有时这些事情不一定最好在模板中完成。我首先想到我的django模板作为构建数据的一种方式。它们总会有一些演示元素,但我尽可能地删除它。其他人不同意。