Django:如何从每个视图写入当前用户名(django)

Ole*_*nko 6 django

我正在写小社交申请.其中一个功能是在站点的标题中写入用户名.所以例如,如果我登录并且我的名字是Oleg(用户名),那么我应该看到:

你好,Oleg | 点击编辑个人资料

否则我应该看到类似的东西:

您好请注册或加入

我想要的是在我的网站的每个页面上显示这一点.显而易见的解决方案是将request.user对象传递到我站点的每个视图中.但是这里http://www.willmer.com/kb/category/django/ 我读到我可以从任何模板中访问请求对象,只需启用:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
)
Run Code Online (Sandbox Code Playgroud)

不知道为什么,但它实际上不起作用:(

也许有人可以帮助我并提出解决方案?

非常感谢,

奥列格

Arn*_*aud 7

另请注意,如果不需要整个请求上下文,则应使用django.core.context_processors.auth而不是django.core.context_processors.request.然后你可以简单地输入:

Hello {{ user.get_full_name }}
Run Code Online (Sandbox Code Playgroud)

在你的模板中.

不要忘记context_instance=RequestContext(request)在打电话时通过render_to_response(或使用direct_to_template).


Dan*_*man 6

这里可能有两个问题.

首先,如果你重新定义TEMPLATE_CONTEXT_PROCESSORS,你将覆盖默认值,这可能不是一个好主意.默认情况下,该设置已包含auth处理器,user无论如何都会为您提供变量.如果你肯定也需要它request,你应该这样做(注意+=):

TEMPLATE_CONTEXT_PROCESSORS += (
    'django.core.context_processors.request',
)
Run Code Online (Sandbox Code Playgroud)

其次,文件中所描述这里使用上下文处理器时,你需要确保你在你的模板中使用的RequestContext.如果你正在使用render_to_response你应该这样做:

return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)