这是我提出的另一个问题,因为可能需要其他答案。
我模板中的代码总是返回false:
{% if request.user.is_authenticated %}
<p>I'm logged in</p>
{% else %}
<p>I am anonymous</p>
{% endif %}
我从文档中了解到,我需要TEMPLATE_CONTEXT_PROCESSORS
在settings.py中包含“ django.contrib.auth.context_processors.auth” ,因此我这样做如下:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.contrib.auth.context_processors.auth", #Added
)
至于我的views.py,我正在使用,render_to_response()
但感觉这可能是导致问题的原因。我还需要在上下文中从数据库传递用户,但是添加了第三个参数context_instance=RequestContext(request)
def public_profile(request, username_in_url):
user = User.objects.get(username = username_in_url)
context = {
'user': user,
}
return render_to_response('public_profile.html', context, context_instance=RequestContext(request))
为什么request.user.is_authenticated
即使用户已登录,仍然返回false?在views.py中使用相同的方法可以正常工作,例如
if request.user.is_authenticated():
return render_to_response('public_profile.html', context)
else:
return render_to_response('public_profile_anon.html', context)
该文档的django.contrib.auth.context_processors.auth
说,这种背景处理器定义了两个变量:user
和perms
。并且user
是
一个
auth.User
表示当前实例登录用户(或一个AnonymousUser
实例,如果客户端没有登录)。
因此,尽管您可以在Python代码request.user
中执行检查,但在模板中为user
。
您的具体情况存在的问题是,您还传递了一个user
基于定义的字典username_in_url
。这与定义的变量冲突django.contrib.auth.context_processors.auth
。
所以:
更改字典(您将其命名为context
),使其user
具有不同的名称。(并在模板中更改对其的引用。)
更改模板以进行检查{% if user.is_authenticated %}
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句