DjangoでWerkzeugのデバッガを使う
Werkzeugというツールキットには、エラー発生時にブラウザ上から対話モードでPythonコードを実行できるという、強力なデバッガが付いています。Pythonコードは、エラー発生箇所でのコンテキストで実行できるため、変数の内容の確認はもちろん、変数を書き換えたりすることでうまくいくまで試行錯誤を行うこともできます。
そこで、そのデバッガをDjango上でも使えるようにする手順を記します。
Werkzeugについて
開発サーバーで使う場合
こちらのサイトを参考にさせていただきました。
Werkzeug + django を簡単に使う方法
http://d.hatena.ne.jp/Voluntas/20090118/1232259389
Werkzeugとdjango_extensionsをインストールする。
$ pip install Werkzeug $ pip install django-extensions
settings.pyにアプリケーションを登録する。
INSTALLED_APPS = (
...
'django_extensions',
)
あとは、サーバーを起動する際に、runserverではなくrunserver_plusとするだけです。
$ python manage.py runserver_plus
Apacheのmod_wsgi上で使う場合
mod_wsgiがすでに入っているものとします。
上記と同様に、Werkzeugをインストールします。django-extensionsは必要ありません。
以下のようなwsgiファイルを作ります。django-extensionsのrunserver_plusコマンドのコードを参考にしています。
# -*- coding: utf-8 -*- import os import sys # パスを通す処理とか # sys.path.append(...) import django from django.core.handlers.wsgi import WSGIHandler from django.core.servers.basehttp import AdminMediaHandler from django.views import debug from werkzeug import DebuggedApplication def null_technical_500_response(request, exc_type, exc_value, tb): raise exc_type, exc_value, tb debug.technical_500_response = null_technical_500_response admin_path = os.path.join(django.__path__[0], '/contrib/admin/media') handler = AdminMediaHandler(WSGIHandler(), admin_path) application = DebuggedApplication(AdminMediaHandler(handler), evalex=True)
このファイルをmod_wsgiの設定でWSGIScriptAliasに指定して、Apacheを再起動すれば、エラー画面でWerkzeugのデバッガが使えるようになります。
なお、DEBUG = TRUE でないとデバッガは表示されません。