読者です 読者をやめる 読者になる 読者になる

Djangoのデバッグツールバー

symfonyからDjangoに移ってきた関係で、Djangoのいいところもいろいろ分かったのだけれど、ちょっと気に入らないところも見えてきた今日この頃。
その1つ目がデバッグツールバー。symfonyには標準で備わっていて、そのページで実行されたSQLや使用されたテンプレート、エラーログも見られて、拡張も出来る優れものなんだけど、Djangoには標準で備わっていなくて不便だなと思っていました(実際、そんなに開発してはいないけど)。
そんなときに見つけたのが、django-debug-toolbarでした。これがsymfonyのものとほとんど同じ機能を提供してくれる感じで、なかなか便利そう。というわけで、インストールの手順と、設定方法を残しておきます。

インストール

まずeasy_installをインストールしておく。

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py

django-debug-toolbarをインストール。

$ sudo easy_install django-debug-toolbar

設定

Djangoプロジェクトのsettings.pyを編集。http://github.com/robhudson/django-debug-toolbar/blob/master/README.rst を参考に。

settings.py:
...
INTERNAL_IPS = ('127.0.0.1',)

DEBUG_TOOLBAR_PANELS = ( 
    'debug_toolbar.panels.version.VersionDebugPanel',
    'debug_toolbar.panels.timer.TimerDebugPanel',
    'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
    'debug_toolbar.panels.headers.HeaderDebugPanel',
    'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
    'debug_toolbar.panels.template.TemplateDebugPanel',
    'debug_toolbar.panels.sql.SQLDebugPanel',
    'debug_toolbar.panels.signals.SignalDebugPanel',
    'debug_toolbar.panels.logger.LoggingPanel',
)

DEBUG_TOOLBAR_CONFIG = { 
    'INTERCEPT_REDIRECTS': False,
    #'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar,
    #'EXTRA_SIGNALS': ['myproject.signals.MySignal'],
    'HIDE_DJANGO_SQL': False,
    #'TAG': 'div',
}
...
MIDDLEWARE_CLASSES = (
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
)
...
INSTALLED_APPS = (
    ...
    'debug_toolbar',
)

INTERNAL_IPSにIPアドレスを指定しておくと、そのIPアドレスからアクセスしたときだけデバッグツールバーが表示されるようになります。また、DEBUG = False にすると、常時デバッグツールバーが表示されなくなります。ただし、SHOW_TOOLBAR_CALLBACK を指定していない場合だけ。

DEBUG_TOOLBAR_CONFIG の簡単な説明

INTERCEPT_REDIRECTS
Trueだと、リダイレクト時(HttpResponseRedirectを返したとき)に、中間ページを表示してログなどを見られるようにする(デフォルト: True)
SHOW_TOOLBAR_CALLBACK
ツールバーを表示するかどうかを制御する関数を指定。その関数はTrue/Falseを返すようにする。省略、もしくはNoneを指定しておくとデフォルトの動作(DEBUGとINTERNAL_IPSを見る)
EXTRA_SIGNALS
プロジェクトで使ってるカスタムシグナル(Observerパターンみたいなやつ?)をリストで指定。
HIDE_DJANGO_SQL
Trueだと、Django自身のコードがSQLスタックトレースに表示されなくなる、らしいけど、よく分からない。(デフォルト: True)
SHOW_TEMPLATE_CONTEXT
Trueだと、テンプレートに渡されている変数(コンテキスト)をテンプレートパネルに表示する。(デフォルト: True)
TAG
どのタグにデバッグツールバーのHTMLを埋め込むか。指定したタグのうち、最外殻(?)のタグ内の最後に埋め込まれるみたい。デフォルトだとbodyタグ内の最後に埋め込まれる。

追記(2010/8/23)

DEBUG_TOOLBAR_CONFIGには以下のものも設定できるようです。

MEDIA_URL
django-debug-toolbarが使っているCSS等のURLのプレフィックス。デフォルトでは、<リクエストのSCRIPT_NAMEヘッダ>/__debug__/m/。ただし、URLディスパッチャでは、/__debug__/m/ となることを想定しているようなので、SCRIPT_NAMEヘッダが指定されているリクエストが送られると、スタイルが適用されなくなる。その場合は、これに"/__debug__/m/"を指定すればOK。
Apacheの設定で指定した"django.root"がSCRIPT_NAMEにくるようなので、そのままの設定で問題ないです。基本的にはいじらず、独自のCSSを使いたいときだけ設定するのだと思います。