为什么地球上我必须要通过的RequestContext在我所有的反应?
-
20-08-2019 - |
题
我想强调在导航菜单中的当前页面。很显然,我需要给菜单链接,如“主动”的一类,当你自己的页面上。这是一个经典的问题,我已经看到了很多的解决方案提出。我的问题是我讨厌所有的人,并考虑他们都不是非常干燥。例如:
@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_response
de快捷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通缉
不隶属于 StackOverflow