django テンプレートからユーザー情報を取得する最良の方法は何ですか?
たとえば、次のことをしたい場合:
- ユーザーがログインしている場合は、「ようこそ [ユーザー名]」を表示します。
- それ以外の場合は、ログイン ボタンを表示します。
django-registration/authentication を使用しています
django テンプレートからユーザー情報を取得する最良の方法は何ですか?
たとえば、次のことをしたい場合:
django-registration/authentication を使用しています
現在の 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
属性を直接参照するよりも優先されます。ソース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
{% if request.user.is_authenticated %}Welcome '{{ request.user.username }}'
{% else %}<a href="{% url django.contrib.auth.login %}">Login</a>{% endif %}
request
テンプレート コンテキスト プロセッサが にインストールされていることを確認しますsettings.py
。
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.request',
...
)
以下は、翻訳も考慮した完全に機能するソリューションです。
template.html
:
{% blocktrans %}Welcome {{ USER_NAME }}!{% endblocktrans %}
context_processors.py
:
def template_constants(request):
return {
'USER_NAME': '' if request.user.is_anonymous else request.user.first_name,
# other values here...
}
カスタム context_processors を次のように正しく設定するように注意してくださいsettings.py
。
TEMPLATES = [
{
# ...
'OPTIONS': {
'context_processors': [
# ...
'your_app.context_processors.template_constants',
],
},
},
]
そして、これはあなたが得るものですdjango.po
:
#: templates/home.html:11
#, python-format
msgid "Hi %(USER_NAME)s!"
msgstr "..."
ロジックをテンプレートの外部に保持することをお勧めします。この目的のために、 に直接表示されるユーザー名を簡単にカスタマイズできますcontext_processors.py
。