django путь с использованием wsgi apache теряет первый параметр - PullRequest
0 голосов
/ 18 марта 2020

У меня есть Django, настроенный для обработки запросов на http://myserver/bayeux/online следующим образом:

  1. в файле apache http.conf: эта строка
WSGIScriptAlias /bayeux /home/peter/path_to_wsgi
В файле urls.py верхнего уровня: если у меня есть эта строка
urlpatterns = [ path('bayeux', _call_to_view)]

Шаблон не будет совпадать. Это связано с тем, что первый элемент пути «bayeux» используется для направления на структуру urls.py и поэтому невидим для вызовов пути внутри urls.py.

Поэтому вместо этого мне нужна эта строка в urls.py:

urlpatterns = [ path('online', _call_to_view)]

Проблема в том, что у меня есть другие папки, которые я хочу отправлять вызовы на django. Для http://myserver/anotherbook/online файл urls.py ТОЛЬКО видит «онлайн» часть пути. Нет никакого способа иметь разные обработчики для / bayeux и / anotherbook. Оба будут обрабатываться одной и той же функцией _call_to_view. Конечно, я могу просмотреть весь URL-адрес в call_to_view, но это ужасно.

Альтернативой может быть КАЖДЫЙ вызов на сервере, перенаправленный на django, если он указан в моем httpd.conf:

WSGIScriptAlias / /home/peter/path_to_wsgi

С этой настройкой у меня могут быть строки

urlpatterns = [ path('bayeux', _call_to_view)]
urlpatterns = [ path('anotherbook', _call_to_different_view)]

Но это имеет ужасный побочный эффект. Это означает, что КАЖДЫЙ звонок на сервер маршрутизируется через django. Я не хочу этого! Я хочу, чтобы apache обрабатывал все остальные вызовы / / .

Так как решить эту проблему? Я думал, что одним из решений было бы поместить WSGIScriptAlias ​​в структуру apache, поэтому:

<Location /bayeux>
        WSGIScriptAlias / home/peter/path_to_wsgi
</Location>

Но это привело к ошибке apache "WSGIScriptAlias ​​не разрешен в контексте ". Так что не делать.

...