Djangoのテンプレートでデバッグモードを判定する

Djangoのテンプレートすべてのページから、{% if DEBUG %}を用いてデバッグモードを判定できるようにする方法を紹介します。context_processorsを用いることで行います。

ビューでデバッグモードを判定する方法

Djangoのビューでデバッグモードを判定する方法として下記があります。

from django.conf import settings DEBUG = settings.DEBUG print(DEBUG) # True

いちいちこの変数をテンプレートに渡すのは面倒なので、context_processorsを用いてDEBUG変数を定義してみます。

django.template.context_processors.debugは微妙

似たような機能として、標準でもdjango.template.context_processors.debugが存在します。

The Django template language: for Python programmers | Django ドキュメント | Django

しかし、この機能はINTERNAL_IPSを適切に設定していないと機能しません。

設定 | Django ドキュメント | Django

Dockerなどを用いると、ローカル開発環境でさえも様々なIPからアクセスされるのでなかなか使いにくいです。

context_processorsを用いたDEBUG変数定義

そこで、INTERNAL_IPSを気にせずsettings.pyのDEBUGを問答無用でテンプレートから呼び出せるcontext_processorsを作ってみます。

app/context_processors.pyに下記のプログラムを追加します。

from django.conf import settings def is_debug(request): return {"DEBUG": settings.DEBUG}

そして、setting.pyのTEMPLATES['OPTIONS']['context_processors']に今回追加したcontext_processorsを追加します。

TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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', 'app.context_processors.is_debug', # 追加 ], }, }, ]

以上で、{% if DEBUG %}が利用できます。

コメント