我在myapp_extras.py中的代码:
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}
在“ 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' )
但我得到一个错误:
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
request在该范围内不是变量。你必须首先从上下文中获取它。传递takes_context给装饰器并添加context到tag参数。
request
akes_context
像这样:
@register.inclusion_tag('new/userinfo.html', takes_context=True) def address(context): request = context['request'] address = request.session['address'] return {'address':address}