ВведениеДжанго localeURL когда WSGIScriptAlias является/PREFIX
Я получил вопрос об использовании localeURL. Все отлично работает для меня с URL, как это: http://www.example.com/
Если я печатаю http://www.example.com/ в адресной строке, он правильно поворачивает в http://www.example.com/ан/, например.
Если я использую вид change_locale, это также все в порядке (т.е. изменение www.example.com/ ан/в www.example.com/ фр /).
проблема
Но мое приложение использовать Apache как сервер, с mod_wsgi. Сценарий httpd.conf содержит следующую строку:
WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi
что дает URL вроде этого:
http://www.example.com/MY_PREFIX/
- Если я печатаю http://www.example.com/MY_PREFIX/ в адресной строке, то адрес превращается в http://www.example.com/en/, когда ожидаемый результат должен be http://www.example.com/MY_PREFIX/en/
Та же проблема возникла с учетом вида change_locale. Я изменил этот код для того, чтобы управлять этим префиксом (магазин в settings.SERVER_PREFIX):
def change_locale(request) :
"""
Redirect to a given url while changing the locale in the path
The url and the locale code need to be specified in the
request parameters.
O. Rochaix; Taken from localeURL view, and tuned to manage :
- SERVER_PREFIX from settings.py
"""
next = request.REQUEST.get('next', None)
if not next:
next = request.META.get('HTTP_REFERER', None)
if not next:
next = settings.SERVER_PREFIX + '/'
next = urlsplit(next).path
prefix = False
if settings.SERVER_PREFIX!="" and next.startswith(settings.SERVER_PREFIX) :
prefix = True
next = "/" + next.lstrip(settings.SERVER_PREFIX)
_, path = utils.strip_path (next)
if request.method == 'POST':
locale = request.POST.get('locale', None)
if locale and check_for_language(locale):
path = utils.locale_path(path, locale)
if prefix :
path = settings.SERVER_PREFIX + path
response = http.HttpResponseRedirect(path)
return response
с этим настраиваемой точки зрения, я в состоянии правильно изменить язык, но я не уверен, что это правильный путь делать вещи.
Вопрос
, когда в httpd.conf вы используете WSGIScriptAlias с/PREFIX (т.е. "/ Блог"), нам нужно, на стороне питона использовать переменную (здесь settings.SERVER_PREFIX), которые соответствуют WSGIScriptAlias? я использую его для MEDIA_URL и других вещей, но, возможно, есть какая-то конфигурация, чтобы сделать это «автоматически» без необходимости управлять этим на стороне python
Считаете ли вы, что этот настраиваемый вид (change_locale) является правильный способ решения этой проблемы? Или есть какие-то автоматические вещи, как для 1.?
Это не решит проблему, если я наберу адрес (http://www.example.com/MY_PREFIX/) в адресной строке. Если настройка - это способ пойти, я тоже изменю это, но я думаю, что есть лучшее решение!
Это похоже на эту проблему в репозитории кода localeURL: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –