我正在编写小型社交应用程序。其中一个功能是在站点的标题中写入用户名。因此,例如,如果我登录并且我的名字是Oleg(用户名),那么我应该看到:
您好,Oleg |点击编辑个人资料
否则我应该看到类似的东西:
您好请注册或加入
我想要的是在我网站的每个页面上显示这一点。显而易见的解决方案是将request.user对象传递到我站点的每个视图中。但在这里http://www.willmer.com/kb/category/django/ 我读到我只需启用以下命令即可从任何模板访问请求对象:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
不确定原因,但实际上不起作用:(
也许有人可以帮助我并建议解决方案?
非常感谢,
Oleg
答案 0 :(得分:7)
另请注意,如果您不需要整个请求上下文,则应使用django.core.context_processors.auth而不是django.core.context_processors.request。然后你只需输入:
Hello {{ user.get_full_name }}
在你的模板中。
当您致电context_instance=RequestContext(request)
(或使用direct_to_template)时,请不要忘记通过render_to_response
。
答案 1 :(得分:6)
这里可能有两个问题。
首先,如果你重新定义TEMPLATE_CONTEXT_PROCESSORS
,你将覆盖默认值,这可能不是一个好主意。默认情况下,该设置已包含auth
处理器,无论如何都会为您提供user
变量。如果您确实需要request
,那么您应该这样做(注意+=
):
TEMPLATE_CONTEXT_PROCESSORS += (
'django.core.context_processors.request',
)
其次,如文档here中所述,在使用上下文处理器时,您需要确保在模板中使用RequestContext。如果你使用render_to_response
,你应该这样做:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
答案 2 :(得分:1)
使用
来自django.template导入RequestContext
而不是
来自django.template导入上下文
所以现在只需调用RequestContext(request,context)
更多here。
答案 3 :(得分:0)
设置上下文进程后,请求将作为名为request
的变量传递给模板。要访问中的用户对象,需要深入查看该变量:
{{ request.user }}
这是list of attributes stored in the Django Request object。更具体地说,这是user attribute。
答案 4 :(得分:0)
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
如果已经设置了TEMPLATE_CONTEXT_PROCESSORS,那就足够了。
答案 5 :(得分:0)
我认为只需添加locals()
即可解决问题。
return render_to_response('my_template.html',
my_data_dictionary,locals())