Django под IIS (с HeliconZoo) в виртуальном каталоге - urls resolver работает с путем без имени каталога
У меня есть сайт Django, работающий под IIS с помощью Helicon Zoo. Он расположен в виртуальной директории (поэтому, URL к нему выглядит так http://mysite.com/django
).
В моем urls.py шаблоны определены так:
urlpatterns = patterns('',
....
url(r'^django/status/(?P<product>.*)/$',views.status),
....
)
Но когда я открываю URL как http://mysite.com/django/status/some_product
Я получаю страницу 404 с сообщением:
Using the URLconf defined in urls, Django tried these URL patterns, in this order:
....
The current URL, status/some_product/, didn't match any of these.
Как вы можете видеть, в URL, который тестируется, нет django. И конечно, когда я меняю шаблон так:
url(r'^status/(?P<product>.*)/$',views.status),
Все отлично работает, но если APPEND_SLASH
включен (и у меня он включен и установите его в False
в settings.py почему-то не помогает) мои запросы вроде http://mysite.com/django/status/some_product
перенаправлены на http://mysite.com/status/some_product/
,
Итак, вопрос: как я могу настроить Django, чтобы он не выбрасывал имя виртуального каталога?
Что мне нужно знать о том, как включить APPEND_SLASH? Щас просто ставлю APPEND_SLASH = False
в settings.py, но без разницы.
Примечание: я почти ничего не знаю о Django и Python и не могу изменить настройку этого сайта (по крайней мере, сейчас).
2 ответа
Наконец-то я понял, что с ним не так.
Оказалось, что причиной описанного поведения является настройка, предоставляемая по умолчанию файлом web.config:
<add name="django.root" value="%APPL_VIRTUAL_PATH%" />
После того как я его удалил все стало работать нормально.
Вот некоторая информация, связанная с django.root
переменная применяется к Apache.
Я заметил, что у zoofcgi есть два режима работы
Поскольку мой проект нуждается во втором (wsgi_app), я заметил, что проблема не была решена только путем установки переменной django.root
,
То есть есть ошибка в настройке переменных среды для второго режима. Поэтому я создал проект helicon-zoofcgi, который решает эту ошибку.
Теперь нет необходимости вводить префикс сайта в URL-адресах django, модуль zoofcgi уже решает его в переменных окружения.
Надеюсь, что этот проект кому-нибудь пригодится в будущем.