Djangoテンプレートのユーザープロファイルにアクセスする方法
-
05-07-2019 - |
質問
{{request.user}}
を使用してDjangoテンプレートのユーザーにアクセスできますが、プロファイルは user関数を介してのみアクセスできるため、どのようにプロファイルのフィールドにアクセスしますか。 get_profile()
?
毎回明示的にプロファイルをテンプレートに渡すことが本当に必要ですか?
解決
{{request.user.get_profile.whatever}}
を使用します。 Djangoのテンプレート言語は、呼び出し可能なもの(この場合は .get_profile()
メソッド)を自動的に呼び出します。
他のヒント
なぜ私にとって違うのかわかりませんが、{{request.user}}ではなく{{user}}を使用する必要があります。
はい、テンプレートからプロファイルにアクセスすることは可能です request.user.get_profile
ただし、小さな注意事項があります。すべてのユーザーがプロファイルを持つわけではありません。これは、私の場合は管理ユーザーの場合でした。直接電話する
このような場合、テンプレートの {{request.user.get_profile.whatever}}
によりエラーが発生します。
すべてのユーザーが常にプロファイルを持っていることが確実な場合は、テンプレートから呼び出すのが安全です。そうでない場合は、ビューのtry-exceptブロック内から get_profile()
を呼び出してテンプレートに渡します。
Djangoを使用している場合> 1.5 get_profile
は使用できなくなりました。
レガシーアプリがある場合は、 settings.py
から AUTH_PROFILE_MODULE = 'myapp.profile'
を削除する必要があります。
Profileクラスで models.OneToOneField(User)
を使用する場合、単純に使用できます
{{ request.user.profile.whatever }}
Djangoテンプレート内
だれにも役立つ場合は、テンプレートで以下を使用しました:
ユーザー名: {{user.username}}
ユーザーの氏名: {{user.get_full_name}}
ユーザーグループ: {{user.groups.all.0}}
メール: {{user.email}}
開始セッション: {{user.last_login}}
サンプルの結果は次のとおりです。
ユーザー:監査人エツィオ
ユーザーグループ:auditGroup
ユーザー名:testUser03
メール:testuser03@auditor.com
セッションは2018年4月16日午後9時38分に開始されました
ありがとう:)
作業中!
プロファイルモデルでrelated_nameを指定します
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
テンプレートを使用します。ここで、company_nameはプロファイルテーブルのフィールドです
{{ request.user.user_profile.company_name }}