Python Django:u是否经过身份验证?u是否匿名?注销后两者都返回true

Python Django:u是否经过身份验证?u是否匿名?注销后两者都返回true,python,django,templates,authentication,django-registration,Python,Django,Templates,Authentication,Django Registration,我正在使用django注册,刚刚设置好 {{user.is_authenticated }} 是真的,即使我已经进入/accounts/logout/并注销了用户 {{user.is_anonymous }} 也返回true。根据django docs,这两种情况应该有所不同: is_anonymous:始终返回False。这是区分用户和匿名用户对象的一种方法。通常,您应该更喜欢使用is_authenticated()而不是此方法 及 是否经过身份验证:始终返回True。这是一种判断用户是

我正在使用django注册,刚刚设置好

{{user.is_authenticated }}
是真的,即使我已经进入/accounts/logout/并注销了用户

{{user.is_anonymous }} 
也返回true。根据django docs,这两种情况应该有所不同:

is_anonymous:始终返回False。这是区分用户和匿名用户对象的一种方法。通常,您应该更喜欢使用is_authenticated()而不是此方法

是否经过身份验证:始终返回True。这是一种判断用户是否已通过身份验证的方法。这并不意味着有任何权限,也不检查用户是否处于活动状态-它只表示用户提供了有效的用户名和密码

我正在使用django注册附带的标准视图,但还没有触及它们。在tempalate中,我有以下代码:

{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
    is anonymous
{% endif $}
{% else %}
    gotta login
{% endif %}
问题出在哪里?我会非常感激的

更新: 我注意到在主页上,它都是经过身份验证的,id\u匿名返回True,而如果我在登录之前进入/accounts/login,只有id\u匿名返回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,一切都很好。但我仍然不知道如何解决这个问题:(

打在头上。我在某处读到:

如果user.u经过身份验证: 始终正确,因为这是一种方法


因此,与其在模板中使用{{user.is_authenticated}},它应该是{user.is_authenticated()}

似乎您正在试图同时解决两件事:使用jinja模板的正确方法是什么,以及如何处理user/AnonymousUser。也许可以尝试一次解决一个问题

我没有使用jinja的经验,但您可能希望检查并确保您考虑了。我所知道的最大区别是方法调用需要显式括号。因此,示例中的is_身份验证和is_匿名调用需要括号

Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }} 
如果这不能解决问题,请尝试安装并查看模板的上下文。检查
user
是否为None或object(user或AnonymousUser)


您还可以在文档中阅读并查看的示例。简而言之,对于AnonymousUser对象,is_anonymous()始终返回True而不是False,并且is_authenticated()总是返回False而不是True。

恐怕我无法在新创建的项目和应用程序中重现这种行为。您使用的是哪个版本的Django?您如何登录用户,然后再注销用户?如果您告诉我如何检查我拥有的Django的哪个版本,我将非常乐意检查he dark-1.2因为我使用的是这个开源的django注册应用程序,我正在登录帐户/登录/并在帐户/注销处注销。如果你告诉我如何在注释中粘贴代码,我可以从这些链接粘贴视图。这是从url文件剪下的一个片段:url(r'^logout/$),auth_views.logout,{'template_name':'registration/logout.html'},name='auth_logout'),我发现了如何告诉django版本,结果是:(1,2,0,'beta',1)太棒了。我认为我或多或少解决了这个问题,但这给出了一个很好的概述,我将检查所有这些东西,gracias!给未来的读者注意:is_authenticated现在是一个属性,所以这里的一些信息已经过时。Django 1.8中不是这样。小心,因为is_authenticated返回一个不可调用的bool(基本上是一个属性,而不是一个函数)。