我想在导航菜单中突出显示当前页面。显然,当您在他们的页面上时,我需要给菜单链接一个像“活动”这样的类。这是一个经典问题,我已经看到了很多解决方案。我的问题是我讨厌所有这些,并且认为它们都不是很干燥。例如:
@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 表达式,如果您当前在此页面上,则返回“活动”。或者,这可以使用命名视图而不是 url 来完成,但原理是相同的。
我的主要问题是我的导航将在 99% 的视图上调用,然而,为了获取当前的请求变量,我仍然需要将 RequestContext 解析为模板,如下所示:
def contact(request):
# snip ...
return render_to_response(
'contact.html',
{ 'myvar' : myvar },
context_instance=RequestContext(request))
为什么我需要将这个 context_instance 行添加到我的每一个视图中,而除了其中一个之外的所有视图都需要请求变量以获取当前 url/视图以突出显示活动链接?这似乎非常潮湿,尤其是对于必须在绝大多数 django 站点中的功能。我希望默认情况下包含该请求,并且可以选择禁止它。我找不到在中间件中执行此操作的方法,因为在视图返回模板后,我无法在模板呈现之前拦截模板。
有什么建议么?