始终在每个Django模板中发送用户信息

时间:2012-03-10 17:37:04

标签: django django-authentication django-registration

我使用预先构建的示例模板进行Django注册,我注意到对于这些页面,Django理解user并执行user.is_authenticateduser.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

2 个答案:

答案 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.authuser会将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的上下文实例参数。