Проблема адресации в Django / Apache - PullRequest
1 голос
/ 07 января 2011

У меня работает приложение django на http://djangohost/appaddress.Я бы хотел, чтобы проект был доступен на http://differentaddress/app.В настоящее время я могу запустить приложение по нужному адресу, но использование {% url %} templatetags дает мне неправильный адрес в форме http://differentaddress/app/appaddress.Кроме того, когда я захожу на адрес приложения django напрямую, все {% url %} ссылки имеют вид http://djangohost/app/appadress Как я могу это изменить?У меня есть эти входы в Apache Conf:

ProxyPass  /app/  http://djangohost/appaddress/
ProxyPassReverse  /app/ http://djangohost/appaddress/

Ответы [ 3 ]

1 голос
/ 07 января 2011

Вам, вероятно, придется сообщить Django, где он работает, манипулируя SCRIPT_NAME

http://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#force-script-name

Или, если вы хотите сохранить вещи в Apache, вы можете попробовать mod_proxy_html - заявление об отказе: не использовал его сам, но заявляет, что переписывает ссылки на HTML-страницах

0 голосов
/ 10 января 2011

Возможно, это не правильное решение, но все же есть обходной путь, не влияющий на настройки apache.Протестировано с mod_msgi, и оно работает как шарм.Вот ссылка: http://fromzerotocodehero.blogspot.com/2011/01/using-proxypass-with-django-project.html.В основном я переопределил встроенную функцию url, создавая собственный URL-адрес temlpatetag.В коде тега я добавил строку, заменяющую в первый раз нежелательное имя приложения пустым знаком.

0 голосов
/ 08 января 2011

То есть, вы хотите «смонтировать» сайт Django по пути под URL? Я уже пробовал это с Apache и mod_proxy, и это было своего рода кошмаром, чтобы узнать. Вот что я придумала (возможно, не полная или не идеальная):

# In your scenario
FORCE_SCRIPT_NAME = "/app/"

# End of settings
_prefix = (FORCE_SCRIPT_NAME or "")
LOGIN_URL          = _prefix + LOGIN_URL
LOGIN_REDIRECT_URL = _prefix + LOGIN_REDIRECT_URL
LOGOUT_URL         = _prefix + LOGOUT_URL
ADMIN_MEDIA_PREFIX = _prefix + ADMIN_MEDIA_PREFIX

Очевидно, что это добавляет "/ app /" к наиболее важным жестко закодированным URL-адресам сайта, плюс он устанавливает FORCE_SCRIPT_NAME, чтобы гарантировать, что {% url something %} приведет к абсолютному URL, например, "/ app / кое-что".

Это сработало для меня, используя mod_wsgi для сайта Django и ProxyPass / ProxyPassReverse для «монтирования». Попробуйте и дайте мне обратную связь, мне интересно, это общее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...