を使用して、ユーザーごとの追加情報をいくつか保存していAUTH_PROFILE_MODULE
ます。
を使用してDjangoテンプレートでユーザーにアクセスできますが{{ request.user }}
、プロファイルは関数を介してのみアクセスできるので、プロファイルのフィールドにどのようにアクセスしますuser.get_profile()
か?
毎回明示的にプロファイルをテンプレートに渡す必要があるのですか?
を使用して、ユーザーごとの追加情報をいくつか保存していAUTH_PROFILE_MODULE
ます。
を使用してDjangoテンプレートでユーザーにアクセスできますが{{ request.user }}
、プロファイルは関数を介してのみアクセスできるので、プロファイルのフィールドにどのようにアクセスしますuser.get_profile()
か?
毎回明示的にプロファイルをテンプレートに渡す必要があるのですか?
回答:
を使用し{{ request.user.get_profile.whatever }}
ます。Djangoのテンプレート言語は、呼び出し可能なもの(この場合は.get_profile()
メソッド)を自動的に呼び出します。
なぜ私にとってそれが異なるのかはわかりませんが、{{request.user}}ではなく{{user}}を使用する必要があります。
django.template.context_processors.request
挿入request
しながら、テンプレート内django.contrib.auth.context_processors.auth
の挿入user
コンテキストインチ docs.djangoproject.com/en/1.10/ref/templates/api/...
はい、request.user.get_profileを使用してテンプレートからプロファイルにアクセスできます
ただし、小さな注意点があります。すべてのユーザーがプロファイルを持つわけではありません。これは、私の場合は管理ユーザーです。その{{ request.user.get_profile.whatever }}
ため、このような場合、テンプレートから直接呼び出すと
エラーが発生します。
すべてのユーザーが常にプロファイルを持っていると確信している場合は、テンプレートから呼び出しても安全です。それ以外の場合get_profile()
は、ビューのtry-exceptブロック内から呼び出し、テンプレートに渡します。
{{ request.user.get_profile.whatever }}
、{{ request.user.get_profile }}
動作し、現在のバージョンにプロファイルが存在するかどうかを確認するために使用できます。docs.djangoproject.com/en/dev/ref/templates/api/…を参照してください。ただし、開発バージョンでは変更されることに注意してください。リンク先の上の段落を参照してください。
Django> 1.5を使用している場合は、使用できなくなりますget_profile
。
レガシーアプリがある場合は、AUTH_PROFILE_MODULE = 'myapp.profile'
から削除する必要がありますsettings.py
。
あなたが使用している場合はmodels.OneToOneField(User)
、あなたのプロフィールクラスで、あなたは簡単に使用することができます
{{ request.user.profile.whatever }}
Djangoテンプレート
request
キーボードはもう必要ないということですか?
それが誰かを助けるなら、私は私のテンプレートで以下を使いました:
ユーザー名: {{ user.username }}
ユーザーのフルネーム: {{ user.get_full_name }}
ユーザー・グループ: {{ user.groups.all.0 }}
Eメール: {{ user.email }}
セッション開始: {{ user.last_login }}
結果の例は次のとおりです。
ユーザー:監査人ezio
ユーザーグループ:auditGroup
ユーザー名:testUser03
メール:testuser03@auditor.com
セッションは2018年4月16日21: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 }}