web-dev-qa-db-ja.com

Djangoテンプレートでユーザー情報を取得する

Djangoテンプレートからユーザー情報を取得する最良の方法は何ですか?

たとえば、単にしたい場合:

  1. ユーザーがログインしている場合、「Welcome [username]」と表示します
  2. それ以外の場合は、ログインボタンを表示します。

Djangoの登録/認証を使用しています

38
River Tam

現在のDjangoバージョンの代替方法:

_{% if user.is_authenticated %}
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
_


注意:

  • ビューではrequest.user.get_username()を使用し、テンプレートでは_user.get_username_を使用します。 username属性を直接参照するよりも優先されます。 ソース
  • このテンプレートコンテキスト変数は、RequestContextが使用されている場合に使用できます。
  • _Django.contrib.auth.context_processors.auth_はデフォルトで有効になっており、変数userが含まれています
  • _Django.core.context_processors.request_テンプレートコンテキストプロセッサを有効にする必要はありません。

ソース: https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

64
user
{% if request.user.is_authenticated %}Welcome '{{ request.user.username }}'
{% else %}<a href="{% url Django.contrib.auth.login %}">Login</a>{% endif %}

settings.pyrequestテンプレートコンテキストプロセッサがインストールされていることを確認してください:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'Django.core.context_processors.request',
    ...
)
37
Timmy O'Mahony

質問のタイトルごとに、次のことが役に立つ場合があります。私のテンプレートで次のものを使用しました:

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

ユーザーの氏名{{ user.get_full_name }}

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

メール{{ user.email }}

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

ありがとう:)

7
Mohammad

まず、フィールドの名前が変更された場合、次のように関数(get_full_name()、get_short_name()など)を上書きする必要があります。

def get_full_name(self):
    return self.names + ' ' + self.lastnames

def get_short_name(self):
    return self.names

テンプレートでは、このように表示できます

{% if user.is_authenticated %}
<strong>{{ user.get_short_name }}</strong>
{% endif %}

これらは認証の方法です https://docs.djangoproject.com/es/2.1/topics/auth/customizing/