AUTH_PROFILE_MODULE
を使用して、ユーザーごとの追加情報を保存しています。
{{ 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
_は使用できなくなります。
レガシアプリがある場合は、_AUTH_PROFILE_MODULE = 'myapp.profile'
_を_settings.py
_から削除する必要があります。
Profileクラスでmodels.OneToOneField(User)
を使用する場合、単純に使用できます
_{{ request.user.profile.whatever }}
_
あなたのDjangoテンプレート
それが誰かを助けるなら、私は私のテンプレートで次のものを使用しました:
ユーザー名:{{ user.username }}
ユーザーのフルネーム:{{ user.get_full_name }}
ユーザー・グループ: {{ user.groups.all.0 }}
Eメール: {{ user.email }}
セッション開始:{{ user.last_login }}
サンプルの結果は次のようになります:
ユーザー:監査人ezio
ユーザーグループ:auditGroup
ユーザー名:testUser03
セッションは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 }}