Django перенаправляет пропущенную часть URL WSGIScriptAlias - PullRequest
0 голосов
/ 24 августа 2011

У меня есть приложение django, настроенное с использованием в основном интерфейса администратора с несколькими моими собственными представлениями. Все работает правильно на сервере devlopment на моей локальной машине.

Однако на рабочем сервере, использующем Apache и mod_wsgi, он путает URL-адреса, когда я выполняю инструкцию перенаправления в одном из моих представлений. Вместо того, чтобы идти к

     www.hostname.com/wsgi/django/admin/myapp/myform.html

идет к

     www.hostname.com/admin/myapp/myform.html

Apache ничего не распознает в папке администратора, поэтому я получаю сообщение об ошибке.

Итак, в моей конфигурации apache у меня есть следующее, так что все, что находится под wsgi / django, отправляется в мое приложение:

WSGIScriptAlias /wsgi/django /project/production/public/wsgi/django_eclipse/myapp.wsgi

На мой проблемный взгляд я имею следующее:

return redirect('/admin/sequencing/load_flowcell?' + params )      

Я могу сделать эту работу, если я изменю перенаправление, добавив часть '/ wsgi / django', но это означает, что я не могу сохранить ту же часть на своем сервере разработки. Есть ли способ в настройках Django или http.conf установить это так, чтобы мой редирект автоматически включал эту часть URL?

Ответы [ 3 ]

0 голосов
/ 24 августа 2011

Django может использовать каркас sites для генерации правильных URL при реверсировании - если вы измените поле domain в строке Site, связанной с вашим сайтом (как указано SITE_ID в вашемsettings.py) до http://www.hostname.com/wsgi/admin, тогда все должно работать нормально.

(В некоторых местах могут быть простые URL-адреса, например, настройки LOGIN_URL или LOGIN_REDIRECT_URL, в которых вы должны убедиться, чтовключает /wsgi/admin часть.)

0 голосов
/ 24 августа 2011

Ну, он перенаправляет в точности на тот URL, который вы ему сказали.

Вот почему вы никогда не должны жестко кодировать URL-адреса где-либо в Django. Если бы вы использовали функцию изменения URL-адреса, он автоматически добавил бы префикс WSGI - он уже знает об этом и учитывает его при использовании тега {% url %} или функции reverse().

Дайте URL-адресу имя в вашем urls.py и используйте его в вызове для перенаправления, а не URL-адреса, и все должно работать нормально. Нет необходимости в дополнительных настройках.

0 голосов
/ 24 августа 2011

РЕДАКТИРОВАТЬ: РЕАЛЬНОЕ ИСПРАВЛЕНИЕ

from django.core.urlresolvers import reverse, get_script_prefix
....
#only of you absolutely HAVE to have a hardcoded url
return redirect(get_script_prefix()+'admin/sequencing/load_flowcell?'+params )
#better!
return redirect(reverse('admin:index')+sequencing/load_flowcell?'+params )

CAVEAT: https://docs.djangoproject.com/en/dev/howto/deployment/modpython/#basic-configuration

<Location "/mysite/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite     <---- Make sure you have this
    PythonDebug On
</Location>
...