我正在使用django-registration,只是设置它。
{{user.is_authenticated }}
是真的,即使我已经去了/ accounts / logout /并将用户注销了。
{{user.is_anonymous }}
也返回true。根据django docs的说法,这两者应该是不同的:
is_anonymous:始终返回False。这是区分User和AnonymousUser对象的一种方法。通常,您应该更喜欢将is_authenticated()用于此方法。
和
is_authenticated:始终返回True。这是一种判断用户是否已通过身份验证的方法。这并不意味着任何权限,也不会检查用户是否处于活动状态 - 它只表示用户提供了有效的用户名和密码。
我正在使用django-registration附带的标准视图,但尚未触及它们。在tempalate中我有以下代码:
{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
is anonymous
{% endif $}
{% else %}
gotta login
{% endif %}
问题出在哪里?我会非常感激的!
更新: 我注意到在主页上,它都是is_authenticated,id_anonymous返回True,而如果我在登录之前进入/ accounts / login,只有is_anonymous返回true应该是。而且,在主页上,如果有帮助,我有以下观点:
def home(request):
return render_jinja(request, 'index.html', blah = 'ga')
更新2: print(request.user.is_authenticated())给出False。然后,我有:
return render_jinja(request, 'index.html', blah = 'ga')
在模板中,user.is_authenticated返回FALSE。
更新3: 如果我使用render_to_response而不是render_jinja,那么一切都很好。仍然不知道如何解决这个问题:(
答案 0 :(得分:11)
好像你想要同时弄清楚两件事;使用jinja模板的正确方法是什么,以及User / AnonymousUser的处理方式是什么。也许试着一次找出这些问题。
我没有使用jinja的经验,但您可能需要检查并确保考虑differences between jinja and django template syntax。我所知道的最大区别是方法调用需要显式括号。所以你的例子中的is_authenticated和is_anonymous调用需要括号。
Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }}
如果仍无法解决问题,请尝试安装django-debug-toolbar并查看模板的上下文。检查并查看user
是否为无或对象(用户或匿名用户)。
您还可以阅读AnonymousUser,并在文档中查看checking for an authenticated user的示例。简而言之,对于AnonymousUser对象,is_anonymous()始终返回True而不是False,而is_authenticated()始终返回False而不是True。
答案 1 :(得分:4)
砸到头上。我在某处读到了:
如果user.is_authenticated: ....#总是如此,因为它是一种方法!
所以,不要在模板中使用{{user.is_authenticated}},而应该是{{user.is_authenticated()}}