8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Djangoのアプリ全体で使える変数の設定方法〜テンプレートなどで便利〜

Posted at

Djangoでアプリを作成するときサイト全体で使用できる定数(変数)があると便利なことが多いかと思います。

たとえば、アプリ名やバージョンなどサイト全体で表示させるテキストです。

Djangoでは、コンテキストプロセッサー(Context Processor)を使用して、定義した定数を取り出します。もちろん、複数設定可能です。

環境

ソフト バージョン
Nginx 1.16.1
uWSGI 2.0.18
Python 3.8.2
Django 3.0.5

Django 3.0.x でのやり方になります。

Templateで扱う変数は、通常viewを通じて渡すが…

Templateでは、{{ 変数 }}というようにして変数を取得して表示しますが、これは通常viewを通じて渡されます。このやり方だとアプリ毎に変数を渡す処理を記述する必要があり、非効率的です。

通常の参照方法

test/view.py
def viewFunc(request):
  template_name = "template.html"
  context = {"variable" : "hello world!"}
  return render(request,template_name,context)

アプリのviewにview関数を作成し、contextとして値を渡します。

template.html
<p>{{ 変数名 }}</p>

このような形でテンプレート内で表示します。

アプリ全体で使用できる定数の設定

コンテキストプロセッサー(Context Processor)を作成することで、アプリ全体への値/オブジェクト渡しが可能になります。

app/settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                
                'mlapp.context_processors.constant_text',, #これを追加
            ],
        },
    },
]

これから追加するconstant_textという関数がテンプレートの値を取得するものになります。

app/context_processors.py
def constant_text(request):
    return {
        'APP_NAME': 'TEST APP',
    }

returnのところにAPP_NAMEというのを追加しています。context_processors.pyは,settings.pyと同じディレクトリ内に作成します。

template.html
<p>{{ APP_NAME }}</p>

これで、アプリ全体から変数を取得し、テンプレートで表示することが可能になります。たったこれだけなので、簡単です。

settings.pyに値を設定したい場合

settings.py
APP_DESCRIPTION='This is a test app.'

settings.pyに変数を作り、値を代入します。

app/context_processors.py
from django.conf import settings

def constant_text(request):
    return {
        'APP_NAME': 'TEST APP',
        'APP_DESCRIPTION': settings.APP_DESCRIPTION,
    }

settings.pyから値を読み込みます。

template.html
<h1>{{ APP_NAME }}</h2>
<p>{{ APP_DESCRIPTION }}</p>

このようにすることで、settings.pyの値も扱えるようになります。

とっても簡単ですね。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?