我想强调在导航菜单中的当前页面。很显然,我需要给菜单链接,如“主动”的一类,当你自己的页面上。这是一个经典的问题,我已经看到了很多的解决方案提出。我的问题是我讨厌所有的人,并考虑他们都不是非常干燥。例如:

@register.simple_tag
def active(request, pattern):
    import re
    if re.search(pattern, request.path):
        return 'active'
    return ''

----

{% load tags %}
<div id="navigation">
    <a class="{% active request "^/about/" %}" href="/about/">About</a>
    <a class="{% active request "^/contact/" %}" href="/contact/">Contact</a>
    <a class="{% active request "^/services/" %}" href="/services/">Services</a>
</div>

标签需要你的当前请求和URL表达式,并返回“积极的”,如果你当前访问此页面。可选地,该可与命名视图来完成,而不是网址但原理是相同的。

我的这个主要问题是,我的导航将在我的意见99%,被称为然而,为了得到当前请求的变量还是有解析的RequestContext的模板,是这样的:

def contact(request):
    # snip ...
    return render_to_response(
                'contact.html',
                { 'myvar' : myvar },
                context_instance=RequestContext(request))

为什么我需要这个context_instance行添加到时候恐怕所有,但其中的一个我的观点每一个的需要的为了得到当前URL /视图,突出活动的请求变量链接?这似乎非常潮湿,特别是对于一个功能,必须是在绝大多数Django的网站。我想在默认情况下被列入该请求,并能选择性地抑制它。我无法找到一个方法来做到这一点在中间件之前,我无法拦截模板的渲染后的视图返回它。

任何建议?

有帮助吗?

解决方案

您的意图是有道理的,你需要RequestContext的大部分时间,只有很少可以省略安全性能方面的原因。该解决方案简单,而不是利用render_to_responsede快捷direct_to_template

from django.views.generic.simple import direct_to_template

def contact(request):
    # snip ...
    return direct_to_template(request, 'contact.html', { 'myvar' : myvar })

...或从render_to装饰 Django的烦人

from annoying.decorators import render_to

@render_to('template.html')
def foo(request):          
    bar = Bar.object.all()  
    return {'bar': bar}     

其他提示

您不必做任何事情来导航的标记给当前的一个不同的风格 - 有声明的方式来做到这一点使用CSS

在这里看到我的答案是:的 Django的:是否有大胆为例当前页面链接一个更好的办法

对于未来的参考,可以使用 Django的标签做什么OP通缉

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top