这是继我的其他question之后,因为它可能需要不同的答案。
我模板中的代码总是返回false:
{% if request.user.is_authenticated %}
<p>I'm logged in</p>
{% else %}
<p>I am anonymous</p>
{% endif %}
我从文档中了解到我需要在settings.py的TEMPLATE_CONTEXT_PROCESSORS
中包含“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)
答案 0 :(得分:6)
django.contrib.auth.context_processors.auth
的{{3}}表示此上下文处理器定义了两个变量: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 %}
。