Djangoでrequest.userが何を参照しているかについて混乱していますか? auth_userテーブルのsernameフィールドを参照していますか、それともユーザーモデルインスタンスを参照していますか?
{{request.user.username}}
または{{user.username}}
を使用してテンプレートの電子メールフィールドにアクセスできなかったため、この疑問がありました。
だから代わりに私はビューファイルで次のことをしました:
userr = User.objects.get(username=request.user)
userr
をテンプレートに渡し、{{ userr.email }}
として電子メールフィールドにアクセスしました。
動作しますが、私はそれについていくらか明確にしたかったです。
テンプレートが AnonymousUser を受け取っている場合、{{request.user.email}}
への参照は見つかりません。以前は、{{request.user.is_authenticated }}
かどうかを尋ねる必要があります。
設定のDjango.core.context_processors.auth
セクションにTEMPLATE_CONTEXT_PROCESSORS
コンテキストプロセッサが含まれているかどうかを確認する必要があります。 Django 1.4または最新の場合)を使用している場合、コンテキストプロセッサはDjango.contrib.auth.context_processors.auth
です。このコンテキストプロセッサは、すべての要求にユーザーオブジェクトを含める必要があります。
request.user
はユーザーモデルオブジェクトです。
request
を明示的に渡さないと、テンプレート内のリクエストオブジェクトにアクセスできません。テンプレートからユーザーオブジェクトにアクセスする場合は、テンプレートに渡すか、RequestContextを使用する必要があります。
設定内容によって異なります。
だから、使用する方が良い
user = User.objects.get(username=request.user.username)
実際、'Django.core.context_processors.request'
のTEMPLATE_CONTEXT_PROCESSORS
リストにsettings.py
を追加する場合、そのような変数を定義する必要はありません。
views.py
でrender
を使用している場合、テンプレートの変数{{request.user.username}}にアクセスできます
request.userは、実際のユーザーモデルインスタンスを指します。
request.user.FIELDNAMEを使用すると、ユーザーモデルのすべてのフィールドにアクセスできます。