Неправильное поведение django.core.urlresolvers.resolve при развертывании без использования root - PullRequest
4 голосов
/ 10 февраля 2011

Когда приложение django развертывается под некорневым URL-адресом Apache (с WsgiScriptAlias ​​/ suburl /path_to_django.wsgi) тегом {% url%} и Функция django.core.urlresolvers.reverse учитывает переменную SCRIPT_NAME и возвращает URL-адреса вида / suburl / path_to_my_view

Однако, когда я использую функцию django.core.urlresolvers.resolve , чтобы разрешить эти URL, выдается ошибка. Это вынуждает меня убрать SCRIPT_NAME сгенерированных URL-адресов перед вызовом решения. Это ожидаемое поведение или я все неправильно понимаю?

Привет.

1 Ответ

1 голос
/ 17 июля 2014

У меня возникла такая же проблема:

  • SCRIPT_NAME, определенный в моей конфигурации apache
  • вызов django.core.urlresolvers.reverse за пределами wsgi не предшествовал префиксу
  • в любом представлении или ресурсе, при вызове того же метода добавляется префикс

Мне удалось автоматически добавить префикс, используя следующие строки кода:

# in settings.py
from django.core.urlresolvers import set_script_prefix
...
FORCE_SCRIPT_NAME = "your-prefix"
set_script_prefix(FORCE_SCRIPT_NAME)
...

Первая строка гарантирует, что ваш wsgi использует ваш префикс каждый раз.Второй задает префикс, так что reverse найдет его.

Обратите внимание, что вам нужно иметь такой же префикс в вашем apache conf.Это немного избыточно, но я нашел более чистое исправление.

...