django.core.urlresolvers.resolve неправильное поведение при развертывании apache без полномочий root

Когда приложение django развертывается под URL-адресом Apache без полномочий root (с 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-адресов перед вызовом разрешения. Это ожидаемое поведение или я все неправильно понимаю?

С уважением.


person Rodrigo    schedule 10.02.2011    source источник


Ответы (1)


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

  • 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. Это немного избыточно, но более чистое исправление я нашел.

person mvdb    schedule 17.07.2014