methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

urlの扱いが判らない

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 %} タグもそのまま利用可能。

よし、すっきりした。