我的代码在myapp_extras.py中:
from django import template
register = template.Library()
@register.inclusion_tag('new/userinfo.html')
def address():
address = request.session['address']
return {'address':address}
Run Code Online (Sandbox Code Playgroud)
在'settings.py'中:
TEMPLATE_CONTEXT_PROCESSORS =(
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.request'
)
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
TemplateSyntaxError at /items/
Caught an exception while rendering: global name 'request' is not defined
Original Traceback (most recent call last):
File "C:\Python25\lib\site-packages\django\template\debug.py", line 71, in render_node
result = node.render(context)
File "C:\Python25\lib\site-packages\django\template\__init__.py", line 915, in render
dict = func(*args)
File "C:\p4\projects\myproject\..\myproject\invoice\templatetags\myapp_extras.py", line 9, in address
address = request.session['address']
NameError: global name 'request' is not defined …Run Code Online (Sandbox Code Playgroud) 我想突出显示导航菜单中的当前页面.显然,当你在他们的页面上时,我需要给菜单链接一个类似'active'的类.这是一个经典问题,我已经看到了很多解决方案.我的问题是我讨厌他们所有人,并认为他们都不是很干.例如:
@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>
Run Code Online (Sandbox Code Playgroud)
标记会获取您当前的请求和网址表达式,如果您当前在此页面上,则会返回"有效".或者,这可以使用命名视图而不是URL来完成,但原理是相同的.
我的主要问题是我的导航将在99%的视图中被调用,然而,为了获取当前请求变量,我仍然使用以下内容解析RequestContext到模板:
def contact(request):
# snip ...
return render_to_response(
'contact.html',
{ 'myvar' : myvar },
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
为什么我需要将这个context_instance行添加到我的每个视图中,除非其中一个人可能只需要一个请求变量,以便获取当前的URL /视图以突出显示活动链接?这看起来非常潮湿,特别是对于必须在大多数django网站中的功能.我希望默认情况下包含请求,并且可以选择禁止它.我找不到在中间件中执行此操作的方法,因为在视图返回后,我无法在模板呈现之前拦截模板.
有什么建议?
navigation django django-templates django-views requestcontext