2017-02-09 12 views
0

何が間違っていますか?私はちょうどユーザーのユーザー名がほしい。私はログに記録されているので、なぜ動作していないのかわかりません。django.contrib.authを使用してテンプレートでユーザーを取得できません

views.py

from django.contrib.auth.models import User 

def check_user(request): 
    data = dict() 
    user = User.objects.all() 
    data['user'] = user 
    return render(request, 'check_user.html', data) 

urls.py

url(r'^check_user/$', views.check_user, name='check_user'), 

check_user.html

{{ request.user.is_authenticated }} 

{% if user.is_authenticated %} 
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p> 
{% else %} 
    <p>Welcome, new user. Please log in.</p> 
{% endif %} 

と私は、この取得しています:

CallableBool(True) 

Welcome, new user. Please log in. 
代わりに{%user.is_authenticated%があれば}の{request.user.is_authenticated%の場合%}私はこの取得しています::210

私が取得する必要があります

Welcome, admin. Thanks for logging in. 

私が使用している場合

Welcome, . Thanks for logging in. 

答えて

2

あなたの問題はあなたのビューである、あなたはデータを作成する必要はありません[「ユーザー」]。テンプレートでは、Djangoは既にテンプレート変数{{ user }}を渡しています。

このように、このデータは削除して、現在のコンテキストをそのまま維持してください。

def check_user(request): 
    return render(request, 'check_user.html', {}) 

テンプレートが機能します。私はこれを取得していますことを使用している場合(何かを変更する必要はありません)

{% if user.is_authenticated %} 
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p> 
{% else %} 
    <p>Welcome, new user. Please log in.</p> 
{% endif %} 

https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

+0

だから私はUser.objectsを渡す必要はありません。テンプレート内に自動的に実装されているので、all()は役に立ちますか? –

+0

すべてのユーザーのリストが必要な場合は、必要です。しかし、ここであなたはページをリクエストした現在のユーザーのユーザー名を尋ねますか?右 ? – Wilfried

+0

はい、ありがとうございます。 –

2

userは、テンプレート内のクエリーセットオブジェクトです。つまり、単一ユーザーではなく、ユーザーのリストです。 あなたは、現在のユーザーが必要な場合は、この使用:ウィルフリードは彼の答えとコメントで言ったように、変数userを上書きすることをお勧めではありません代わりに

{% if user.is_authenticated %} 
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p> 

UPDATE

{% if request.user.is_authenticated %} 
    <p>Welcome, {{ request.user.username }}. Thanks for logging in.</p> 

をテンプレートで。ですから、ビュー内のユーザーのリストが必要な場合、usersにコンテキスト変数の名前を変更する方が良いでしょう:

users = User.objects.all() 
data['users'] = users 
+0

、私はそれを使用しましたが、私は書くのを忘れ:ようこそ、。ログインしていただきありがとうございます。 –

+0

@NitaAlexandruも変更しました。 '

ようこそ、{{request.user.username}}。ログインしていただきありがとうございます。

'部分? – neverwalkaloner

+0

ああ、私は試してみましょう –

関連する問題