2010-06-07 10 views
8

WprowadzenieDjango localeURL gdy WSGIScriptAlias ​​jest/PREFIKSÓW

mam pytanie o wykorzystaniu localeURL. Wszystko działa świetnie dla mnie url tak: http://www.example.com/

problemem

Ale mój wniosek użycie Apache jako serwer, z mod_wsgi. Skrypt httpd.conf zawiera wiersz:

WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi 

który daje url tak:
http://www.example.com/MY_PREFIX/

Ten sam problem wystąpił w widoku change_locale. I zmodyfikowany kod w celu zarządzania tego prefiksu (sklep w 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 

z tego niestandardowego widoku, że jestem w stanie poprawnie zmienić język, ale nie jestem pewien, że to właściwa droga Robi coś.

Pytanie

  1. gdy w httpd.conf użyć WSGIScriptAlias ​​z/prefiksu (czyli "/ blog"), nie musimy na stronie Pythona użyć zmiennej (tutaj settings.SERVER_PREFIX), które pasują do WSGIScriptAlias? Używam go do MEDIA_URL i innych rzeczy, ale może jest jakaś konfiguracja do zrobienia, aby działało "automatycznie" bez konieczności zarządzania tym po stronie Pythona

  2. Czy uważasz, że ten niestandardowy widok (change_locale) jest właściwy sposób zarządzania tym problemem? Czy jest jakiś rodzaj automagii jak na 1.?

  3. Nie rozwiązuje problemu, jeśli wpisuję adres (http://www.example.com/MY_PREFIX/) w pasku adresu. Jeśli dostosowywanie jest do zrobienia, zmienię to również, ale myślę, że jest lepsze rozwiązanie!

+0

Wydaje się być związany z tym problemem w repozytorium kodu localeURL: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –

Odpowiedz

0

spróbuj tego (nie jestem pewien, czy to będzie działać chociaż):

 
WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 
zasadzie idea s, aby Django uwierzyć, że nie ma przedrostek

ale trzeba się upewnić, Django emituje poprawne adresy URL w wynikach HTML.

3

Powinieneś nie być trudnym okablowaniem SERVER_PREFIX w ustawieniach. Prefiks instalacji witryny jest dostępny jako SCRIPT_NAME w słowniku środowiska WSGI. Zatem z pamięci jest dostępna jako request.META.get ('SCRIPT_NAME').

+0

Nie pracuję już nad tym projektem, ale dźwięki dobry trop! –

Powiązane problemy