62

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

たとえば、次のことをしたい場合:

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

django-registration/authentication を使用しています

4

5 に答える 5

112

現在の 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

于 2014-04-06T09:32:11.030 に答える
45
{% 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',
    ...
)
于 2012-12-04T22:34:45.447 に答える
0

以下は、翻訳も考慮した完全に機能するソリューションです。

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

于 2021-11-12T16:14:59.873 に答える