web-dev-qa-db-ja.com

Djangoテンプレートでユーザープロファイルにアクセスするには?

AUTH_PROFILE_MODULE を使用して、ユーザーごとの追加情報を保存しています。

{{ request.user }}を使用してDjangoテンプレートでユーザーにアクセスできますが、プロファイルは関数user.get_profile()を介してのみアクセスできるため、どのようにプロファイルのフィールドにアクセスしますか?

毎回明示的にプロファイルをテンプレートに渡すことが本当に必要ですか?

84
Swaroop C H

_{{ request.user.get_profile.whatever }}_を使用します。 Djangoのテンプレート言語は、呼び出し可能なもの(この場合は.get_profile()メソッド)を自動的に呼び出します。

131
AdamKG

なぜ私にとって違うのかわかりませんが、{{request.user}}ではなく{{user}}を使用する必要があります。

25
Rachel

はい、request.user.get_profileを使用してテンプレートからプロファイルにアクセスできます

ただし、小さい 警告:すべてのユーザーがプロファイルを持つわけではありません。これは、私の場合は管理ユーザーの場合でした。そのため、テンプレートから_{{ request.user.get_profile.whatever }}_を直接呼び出すと、このような場合にエラーが発生します。

すべてのユーザーが常にプロファイルを持っていることが確実な場合は、テンプレートから呼び出すのが安全です。そうでない場合は、ビューのtry-exceptブロック内からget_profile()を呼び出し、テンプレートに渡します。

8

Django> 1.5を使用している場合、_get_profile_は使用できなくなります。

レガシアプリがある場合は、_AUTH_PROFILE_MODULE = 'myapp.profile'_を_settings.py_から削除する必要があります。

Profileクラスでmodels.OneToOneField(User)を使用する場合、単純に使用できます

_{{ request.user.profile.whatever }}
_

あなたのDjangoテンプレート

4
Sascha Rau

それが誰かを助けるなら、私は私のテンプレートで次のものを使用しました:

ユーザー名:{{ user.username }}

ユーザーのフルネーム:{{ user.get_full_name }}

ユーザー・グループ: {{ user.groups.all.0 }}

Eメール: {{ user.email }}

セッション開始:{{ user.last_login }}

サンプルの結果は次のようになります:

ユーザー:監査人ezio

ユーザーグループ:auditGroup

ユーザー名:testUser03

メール:[email protected]

セッションは2018年4月16日午後9時38分に開始.

ありがとう:)

2
Mohammad

働く!

プロファイルモデルでrelated_nameを指定します

user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)

次に、テンプレートで使用します。ここで、company_nameはプロファイルテーブルのフィールドです

{{ request.user.user_profile.company_name }}
0
Nids Barthwal