2010-06-07 3 views
8

ВведениеДжанго 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/

Та же проблема возникла с учетом вида 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 

с этим настраиваемой точки зрения, я в состоянии правильно изменить язык, но я не уверен, что это правильный путь делать вещи.

Вопрос

  1. , когда в httpd.conf вы используете WSGIScriptAlias ​​с/PREFIX (т.е. "/ Блог"), нам нужно, на стороне питона использовать переменную (здесь settings.SERVER_PREFIX), которые соответствуют WSGIScriptAlias? я использую его для MEDIA_URL и других вещей, но, возможно, есть какая-то конфигурация, чтобы сделать это «автоматически» без необходимости управлять этим на стороне python

  2. Считаете ли вы, что этот настраиваемый вид (change_locale) является правильный способ решения этой проблемы? Или есть какие-то автоматические вещи, как для 1.?

  3. Это не решит проблему, если я наберу адрес (http://www.example.com/MY_PREFIX/) в адресной строке. Если настройка - это способ пойти, я тоже изменю это, но я думаю, что есть лучшее решение!

+0

Это похоже на эту проблему в репозитории кода localeURL: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –

ответ

0

попробовать это (я не уверен, будет ли он работать, хотя):

 
WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 
в основном идея s, чтобы Джанго считают, что нет префикса

но вы должны убедиться, что Джанго излучает правильные URL-адреса в своем HTML-выходе.

3

Вы не должны быть жесткой проводкой SERVER_PREFIX в настройках. Префикс монтирования для сайта доступен как SCRIPT_NAME в словаре WSGI. Таким образом, из памяти доступно как request.META.get ('SCRIPT_NAME').

+0

Я больше не работаю над этим проектом, но звучит хороший лидер! –

 Смежные вопросы

  • Нет связанных вопросов^_^