is_authenticatedはAnonymousUserに対してTrueを返します。

私はログインしていないときに True を返す is_authenticated で苦労しています:

u = request.user
if u.is_authenticated:
    raise Exception('I am said to be authenticated, but I really am not.')

明確にするために、Djangoデバッグビューは An として An を正しく識別します。

u   

さらに奇妙なテンプレート is_anonymous はうまくいきます:

{% if not request.user.is_authenticated %}
    We are anonymous.
{% endif %}

何故ですか?

4

2 答え

メソッドです。不動産ではありません。あなたはそれを呼び出す必要があります:

if u.is_authenticated():

もちろん、テンプレートでは、Django あなたのためにメソッドを呼び出します。自動的に。

26
追加された

is_authenticated is a method, so you need some parentheses there. Otherwise, u.is_authenticated is the function object, which is a Trueish value.

テンプレート言語では、引数を持たない関数は関数として評価されるため、そこにうまくいきます。

6
追加された
ああ、ありがとう。これは完璧な意味合いがあります。それらの微妙なバグの1つは、何年もの間、あなたの目を訓練していないかもしれません。
追加された 著者 Dan Abramov,