見出し画像

Django_ログインしているユーザー名をTemplateで表示 #175日目

こちらの技術書に沿ってサンプルアプリを作っています。
細かいコードは記載しませんが、この中に出てきたコードで学びになったものをアウトプットしたいと思います。


本日はテンプレートファイル上で気になるポイントがあったので調べてみました。ログイン後、ユーザー名を表示させているのですが、肝心のユーザー名の変数({{ user.get_username }})がどこから来ているか分からなかったのです。

以下のようにナビバーに表示しています。

[index.html]

<b-nav-item-dropdown right>
     <template slot="button-content">{{ user.get_username }}</template>
     <b-dropdown-item href="{% url 'rest_framework:logout' %}">
           ログアウト
     </b-dropdown-item>
</b-nav-item-dropdown>

↓右上のadminがそうです。


まず、テンプレートで扱える変数に関して前提を整理します。変数はコンテキスト変数(context)と呼ばれ、【 {<変数名1>: <変数1>, <変数名2>: <変数2>,…..} 】という形式で格納されています。

そしてこのcontextは以下2種類の変数を含んでいます。

1.  views.pyでrender関数などを用いて渡された変数
2.  settings.py内のTEMPLATESのOPTIONに指定されている
     'context_processers'で指定されるファイル内で定義された変数
 
userは2.の説明にあたる変数であり、他にviews.pyで指定しなくても使える主な変数としてrequest, perm, messageなどがある。

【Django】template上で使用できる user について


説明にある箇所を見てみます。context_processorsの中にある、「auth」というのがuserの所在です。

[settings.py]
 
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # テンプレートファイルの検索ディレクトリに「<ベースディレクトリ>/templates」を指定
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',  # ここにuserが定義されている 
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]


また一つDjangoのことが知れました。
ここまでお読みいただきありがとうございました!


参考


この記事が気に入ったらサポートをしてみませんか?