2020/11/03
Django デバッグ django-debug-toolbardjango-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',
を追加する必要がありますが、追加する位置に注意が必要です。
レスポンスコンテンツをエンコードするようなミドルウェアよりは、下に書かないといけないらしいです。例えば、GZipMiddlewareやFlatpageFallbackMiddlewareはDebugToolbarMiddlewareより上にないといけないらしい。
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/html
かapplication/xhtml+xml
になっている必要があります。
ブラウザの検証機能などを使って、content-typeを調べてみましょう。
ブラウザのキャッシュ
正しく設定していても、ブラウザにキャッシュが残っているとツールバーが表示されないことがあるようです。スーパーリロードなどを試してみましょう。