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
https://docs.djangoproject.com/ja/2.2/ref/templates/api/#django.template.context_processors.debug
しかし、この機能は INTERNAL_IPS を適切に設定していないと機能しません。
設定 | Django ドキュメント | Django
https://docs.djangoproject.com/ja/2.2/ref/settings/#internal-ips
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 %} が利用できます。