mod_wsgi + Django を試している。Apache configで
WSGIScriptAlias /test /path/to/app.wsgi
として、app.wsgiでは、
application = django.core.handlers.wsgi.WSGIHandler()
としている。
この設定だと、environment['SCRIPT_PATH']が/testに、environment['PATH_INFO']が残りになる。
http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango
を見ると、古いバージョンでは PATH_INFO を SCRIPT_NAME + PATH_INFO に置き換える方法が紹介されているけど、この方法は Django 1.0 では必要ないと書かれている。
Django 1.0 では、
- urls.py で、 URLの正規表現に SCRIPT_PATH の部分を入れるべき?
- django.core.urlresolver.set_script_prefix は勝手に設定される?それとも自分で設定しないといけないの?
追記
django.core.handlers.wsgi.WSGIHandler#__call__() で、きちんと django.core.urlresolver.set_script_prefix() が呼ばれている。
django.core.urlresolver.reverse() は、キーワード引数 prefix が デフォルト値 None の場合、 set_script_prefix() で設定された値を利用している。なので、
- urls.py の正規表現に、 SCRIPT_PATH の部分は含めない。
- django.core.urlresolver.set_script_prefx は、(少なくともwsgiでは)自動的に設定されている。{% url %} タグもそのまま利用可能。
よし、すっきりした。