5

私はdjango-registrationを使用しています。Django:is_authenticatedとis_anonymousは、ログアウト後もtrueを返します。

{{user.is_authenticated }} 

は、すでに/ accounts/logout /に行ってユーザーをログアウトしても、trueです。

{{user.is_anonymous }} 

もtrueを返します。 djangoドキュメントによれば、これらの2つは異なるはずです:

is_anonymous:常にFalseを返します。これは、UserオブジェクトとAnonymousUserオブジェクトを区別する方法です。通常、このメソッドにはis_authenticated()を使用するほうがよいでしょう。

is_authenticated:常にtrueを返します。これは、ユーザーが認証されたかどうかを確認する方法です。これは許可を意味するものではなく、ユーザーが有効なユーザー名とパスワードを入力したことを示しているだけです。

私はdjango登録に付属していて、まだそれらに触れていない標準のビューを使用しています。天気予報では、私は次のコードを持っています:

{% if user.is_authenticated %} 
{% user }} 
{% if user.is_anonymous %} 
    is anonymous 
{% endif $} 
{% else %} 
    gotta login 
{% endif %} 

どこに問題がありますか?本当にありがとう!

UPDATE: ホームページでは、is_authenticatedとid_anonymousの両方がTrueを返します。ログインする前に/ accounts/loginに行くと、is_anonymousのみがtrueを返します。

def home(request): 
    return render_jinja(request, 'index.html', blah = 'ga') 

UPDATE 2:それは場合に役立ちます。また、ホームページ上で、私は次のビューを持っている プリント(request.user.is_authenticatedを())Falseを与えます。その後、私が持っている:

return render_jinja(request, 'index.html', blah = 'ga') 

とFALSEを返しuser.is_authenticatedテンプレート、で。

更新3: render_jinjaの代わりにrender_to_responseを使用すると、すべてが良好です。まだ頭の上にこのものの:(

+0

私は、この動作を新しく作成したプロジェクトやアプリケーションで再現することはできません。どのバージョンのDjangoを使用していますか?どのようにユーザーをログインさせた後、ユーザーをログアウトしていますか? –

+0

私が持っているdjangoのバージョンを確認する方法を教えてもらえれば、私はチェックして嬉しいです!暗闇の中で撮影 - 1.2 – mgPePe

+0

私はこのオープンソースのdjango登録アプリケーションを使用しているので、私はアカウント/ログインでロギングしていて、アカウント/ログアウトでログアウトしています。コメントにコードを貼り付ける方法を教えたら、それらのリンクからのビューを貼り付けることができます – mgPePe

答えて

11

すぐに、ジンジャーのテンプレートとwhを使う正しい方法は何ですか? atはUser/AnonymousUserとの取引です。たぶんこれらの問題を1つずつ解明しようとします。

私はジンジャーの経験はありませんが、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がNoneまたはオブジェクト(UserまたはAnonymousUser)であることを確認してください。

また、AnonymousUserを読んで、checking for an authenticated userの例をドキュメントに表示することもできます。簡単に言えば、AnonymousUserオブジェクトの場合、is_anonymous()は常にFalseではなくTrueを返し、is_authenticated()は常にTrueではなくFalseを返します。

+0

私は問題を多かれ少なかく解決したと思ったが、それはとても素晴らしい概観を与え、私はそれらのすべてをチェックする、gracias! – mgPePe

+0

将来の読者のための注意:is_authenticatedは今のプロパティなので、ここの情報のいくつかは古くなっています。 – wim

4

スマックを修正する方法がわからない、私はどこかで読ん:。

user.is_authenticated場合:常に ....#真、それは方法であるため、 !

、代わりに有しているとそう、{{user.is_authenticated}}テンプレートでは、それがあるべき{{user.is_authenticated()}}

あなたは二つのことを把握しようとしているように思え
+3

Django 1.8ではそうではありません。 is_authenticatedは呼び出し不可能なbool(基本的には関数ではなくプロパティ)を返すので注意してください。 –

関連する問題