DjangoBrothers BLOG ✍️

2020/11/03

このエントリーをはてなブックマークに追加
Django デバッグ django-debug-toolbar

django-debug-toolbarが表示されないときに確認すること

django-debug-toolbarを導入して、ツールバーを画面に表示するためにはいくつか注意点があります。

設定したはずなのに、ツールバーが表示されないときは以下の項目をチェックしてみてください。

DEBUGがTrueになっているか

デフォルトだと、DEBUG=Trueの時にしかツールバーは表示されません。settings.pyのDEBUGの値を確認してみてください。

bodyタグを使っているか

HTMLファイルにbodyタグが使われているかを確認してみてください。

デフォルトの状態だと、ツールバーの機能は</body>が存在しない場合は使えないようになっています。

INSTALLED_APPSの設定

settings.pyのINSTALLED_APPS'debug_toolbar''django.contrib.staticfiles',が追加されているか確認してみてください。

settings.py

INSTALLED_APPS = [
    # ...
    'django.contrib.staticfiles',  # (デフォルトで存在する)
    # ...
    'debug_toolbar',  # 追加
]

MIDDLEWAREの設定

ツールバーを使うには、settings.pyのMIDDLEWARE'debug_toolbar.middleware.DebugToolbarMiddleware',を追加する必要がありますが、追加する位置に注意が必要です。

レスポンスコンテンツをエンコードするようなミドルウェアよりは、下に書かないといけないらしいです。例えば、GZipMiddlewareFlatpageFallbackMiddlewareDebugToolbarMiddlewareより上にないといけないらしい。

settings.py

MIDDLEWARE = [
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'django.middleware.gzip.GZipMiddleware',
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',  # 追加
]

INTERNAL_IPSの設定

settings.pyにINTERNAL_IPSを記載する必要があります。INTERNAL_IPSには、リスト形式で接続元のIPアドレスを記入します。

settings.py

INTERNAL_IPS = ['127.0.0.1']

基本的には、'127.0.0.1'を指定すれば良いはずですが、場合によっては動かないこともあります。その場合はview関数内などで、request.META.get('REMOTE_ADDR')とすると接続元のIPを取得できるので、取得したIPをINTERNAL_IPSに指定します。

views.pyで接続元IPを取得する例

def index(request):
    # ...
    ip = request.META.get('REMOTE_ADDR')  # これで取得できたIPをINTERNAL_IPSに追加する
    return render(request, 'index.html', {"ip": ip})

SHOW_TOOLBAR_CALLBACKの設定

INTERNAL_IPSを設定してもツールバーが表示されない場合は、SHOW_TOOLBAR_CALLBACKを設定すると良いと思います。

SHOW_TOOLBAR_CALLBACKはデフォルトだとshow_toolbar関数が設定されていますが、上書きして必ずTrueを返す関数を設定してしまえばツールバーは表示されるはずです。

settings.py

# 追加
DEBUG_TOOLBAR_CONFIG = {
    "SHOW_TOOLBAR_CALLBACK" : lambda request: True,  # Trueを返すlambda関数を設定
}

content-type

レスポンスのcontent-typeが、text/htmlapplication/xhtml+xmlになっている必要があります。

ブラウザの検証機能などを使って、content-typeを調べてみましょう。

ブラウザのキャッシュ

正しく設定していても、ブラウザにキャッシュが残っているとツールバーが表示されないことがあるようです。スーパーリロードなどを試してみましょう。

関連記事