我使用预先构建的示例模板进行Django注册,我注意到对于这些页面,Django理解user
并执行user.is_authenticated
和user.username
之类的操作。
我尝试查看Django注册和views.py
中的django.contrib.auth.views
代码,但我无法弄清楚这两个代码总是将user
信息发送到模板。< / p>
我总是可以明确地将user
上下文信息发送到每个视图,但这会违反DRY原则。
我尝试使用this solution,但收到错误消息
Put 'django.contrib.auth.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.
即使我将上述路径放在settings.py
这样的
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'doors.processor_file_name.user',
)
我的模板仍然不了解user
。
答案 0 :(得分:1)
事实证明,每次我在render_to_response
...
views.py
时
def order_all( request ) :
orders = Order.objects.all()
return render_to_response( 'doors/order/list.html', { 'orders' : orders } )
dictionary isn't a RequestContext
。使用RequestContext
会自动包含TEMPLATE_CONTEXT_PROCESSORS
,在我的情况下会包含django.contrib.auth.context_processors.auth
,user
会将def order_all( request ) :
orders = Order.objects.all()
return render_to_response( 'doors/order/list.html', context_instance = RequestContext( request, { 'orders' : orders } ) )
信息传递给每个模板。
换句话说,我只需要将上面的代码更改为此
RequestContext
不要忘记导入from django.template import RequestContext
django.contrib.auth.context_processors.auth
事实证明,我不需要在doors.processor_file_name.user
中明确包含TEMPLATE_CONTEXT_PROCESSORS
(或写我的自定义{{1}}),因为django.contrib.auth.context_processors.auth
is included by default
答案 1 :(得分:0)
我意识到这是一个老问题,但对于遇到此问题的其他人,你可以使用“render”而不是“render_to_response”:
def order_all(request):
orders = Order.objects.all()
return render(request, 'doors/order/list.html', { 'orders': order })
这也无需导入RequestContext。根据{{3}},“render”与“render_to_response”相同,但有一个强制使用RequestContext的上下文实例参数。