Django localeURL, когда WSGIScriptAlias ​​имеет значение / PREFIX - PullRequest
8 голосов
/ 07 июня 2010

Введение

У меня есть вопрос об использовании localeURL. Все отлично работает для меня с URL, как это: http://www.example.com/

  • Если я наберу http://www.example.com/ в адресной строке, он будет правильно преобразован, например, в http://www.example.com/en/.

  • Если я использую представление change_locale, с ним тоже все в порядке (то есть измените www.example.com/en/ в www.example.com/fr/) .

проблема

Но мое приложение использует 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 (т.е. "/ Blog"), нужно ли нам на стороне python использовать переменную (здесь settings.SERVER_PREFIX), которая соответствует WSGIScriptAlias? я использую его для MEDIA_URL и других вещей, но, возможно, есть какая-то конфигурация, чтобы заставить его работать «автоматически» без необходимости управлять этим на стороне Python

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

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

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

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

0 голосов
/ 03 сентября 2011

попробуйте это (хотя я не уверен, будет ли это работать): WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 в основном идея заставить django поверить в отсутствие префикса

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

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