◀ 8.

【django】テンプレートで定数を使用する方法

▶
この記事の要点
  • Django テンプレート内で共通定数を使う方法
  • settings.py と同階層に const.py を作り、コンテキストプロセッサとして定数を返す関数を定義
  • settings.py の TEMPLATES → context_processors に登録
  • テンプレートで {{ CONST_1 }} のように変数名そのままで参照できる

 

定数を返す関数を作る

設定のPythonパスからcontext processorを呼び定数をテンプレートへ渡す図

settings.pyと同階層にconst.pyを作成する。

def consts(request):

    return {

        'CONST_1': 'test1',

        'CONST_2': 'test2',

    }

 

settings.pyのcontext_processorsに上記のファイルを追加する。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            '
context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                '
app1.const.consts',
            ],
        },
    },
]

※app1はconst.pyを置いたPythonパッケージのimport名です。表示用プロジェクト名ではありません。app1.const.constsはパッケージ・モジュール・関数の順です

 

適当なテンプレートで定数を出力させる。

<h1>テスト</h1>

{{ CONST_1 }}

{{ CONST_2 }}

 

ファイル配置と登録パスをそろえる

元の関数・設定・テンプレート例は上に残しています。以下はwiki_configというパッケージ名を使う独立例です。自分の既存設定全体を置換せず、context_processorsへ1項目を追加してください。Django 6.0.7 / Python 3.12で実際のテンプレート描画を確認しました。

project/
  manage.py
  wiki_config/
    __init__.py
    settings.py
    const.py
  templates/
    output.html

wiki_configには空の__init__.pyを置き、プロジェクトのルートをPythonからimportできる状態にします。DJANGO_SETTINGS_MODULEがwiki_config.settingsなら、同じパッケージの関数はwiki_config.const.constsです。別のアプリにconst.pyを置く場合はそのアプリのimport名を使います。

wiki_config/const.py

def consts(request):
    return {
        'CONST_1': 'test1',
        'CONST_2': 'test2',
    }

settings.pyで追加する項目

'wiki_config.const.consts',

登録先はTEMPLATESの対象DjangoTemplatesエンジンのOPTIONS.context_processors配列です。既存のrequest・auth・messagesなどは残します。文字列はファイルパスや関数呼出しではなくimportパスであり、末尾に括弧を付けません。複数のエンジンがある場合は、この画面が使うエンジンへ追加します。

request付きでテンプレートを描画する

templates/output.html

<h1>テスト</h1>
{{ CONST_1 }}
{{ CONST_2 }}

既存ビューへ組み込む断片

from django.shortcuts import render

def example(request):
    return render(request, 'output.html', {})

テンプレートの配置に合わせて既存TEMPLATES.DIRSやアプリ内templatesを設定し、既存URL設定へビューを登録します。上の断片だけでは公開URLはできません。登録されたcontext processorはrequestを伴う描画で呼ばれ、辞書のキーCONST_1・CONST_2がテンプレート変数になります。

実際に確認した出力

<h1>テスト</h1>
test1
test2

バックエンドのTemplate.render({}, request)ではこの出力を確認しました。一方、同じテンプレートをrender({})とrequestなしで描画すると、定数は自動で渡されず、標準設定では未定義変数の場所は空文字になります。HTTPビューではrender(request, ...)のようにrequestを渡す形を使います。今回の検証はテンプレート実描画までで、本番URL・ミドルウェア全体の検証ではありません。

表示されないときの確認順

  1. 実際に読み込むsettings.pyとDJANGO_SETTINGS_MODULEを確認する。setting.pyという別ファイルへ書いていないか見る。
  2. const.pyの位置と登録文字列を照合する。Pythonからwiki_config.const.constsをimportできるか確認する。
  3. 関数が辞書を返すか、キー名とテンプレートの変数名・大文字小文字が合うか確認する。
  4. request付きで、設定したエンジンを使って描画しているか確認する。単なる文字列置換やrequestなしの描画では自動注入されない。
  5. ビューから同じキーを渡していないか確認する。今回の検証では明示contextのCONST_1がprocessorの値より優先された。
  6. 既存context_processorsを消していないか確認する。変更を読み込むため、運用手順に沿ってアプリプロセスを再起動する。

全テンプレートへ渡してよい値だけ公開する

context processorは表示に必要な共通値を渡すためのものです。settings全体・環境変数全体・SECRET_KEY・DBパスワード・APIトークンを辞書へ入れないでください。値が直接表示されていなくても、テンプレートから参照可能な範囲へ広げることになります。

関数は描画時に実行されるため、重いDB問い合わせや外部通信を定数注入のために行わない設計が基本です。表示用文字列をHTMLとして信頼せず、自動エスケープを維持してください。safeフィルタでHTML化して問題を隠す対処はしません。

公式資料: DjangoのRequestContextとcontext processors、renderショートカット(2026年10月確認)。

子ページ

子ページはありません

同階層のページ
  1. Templateの使用準備
  2. Template の定義方法
  3. テンプレートの作成と共通化
  4. setting.pyにおけるテンプレートの設定
  5. テンプレートの名前の重複について
  6. 静的ファイルの読み込み
  7. if文
  8. テンプレートで定数を使用する方法
  9. aタグのhrefの記載方法