0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-02-26

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

※ これは2019/7/23に個人ブログで公開した記事を移植し、CC0-1.0で提供しています。情報は古い可能性があります。

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

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 が存在します。

しかし、この機能は 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 %} が利用できます。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?