2010-06-07 11 views
8

EinführungDjango localeURL wenn WSGIScriptAlias ​​ist/PREFIX

erhielt ich eine Frage über localeURL Nutzung. Alles funktioniert gut für mich mit url wie folgt aus: http://www.example.com/

  • Wenn ich http://www.example.com/ in die Adressleiste eingeben, es richtig in http://www.example.com/en/ zum Beispiel dreht.

  • Wenn ich die Ansicht change_locale verwenden, es ist auch alles in Ordnung (dh Änderung www.example.com/ en/in www.example.com/ fr /).

Problem

Aber meine Anwendung verwenden Apache als Server, mit mod_wsgi. Die httpd.conf Skript diese Zeile enthält:

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

die URL wie folgt gibt:
http://www.example.com/MY_PREFIX/

Das gleiche Problem trat bei der Ansicht change_locale auf. Ich diesen Code geändert, um diesen Präfix (Speicher in settings.SERVER_PREFIX) zu verwalten:

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 

mit dieser kundenspezifischen Ansicht, ich bin in der Lage richtig Sprache zu ändern, aber ich bin nicht sicher, das ist der richtige Weg von Dinge tun.

Frage

  1. wenn in httpd.conf Sie WSGIScriptAlias ​​mit/PREFIX (zB "/ Blog") verwenden, die wir brauchen, auf Python Seite eine Variable zu verwenden (hier settings.SERVER_PREFIX) das mit WSGIScriptAlias ​​übereinstimmt? Ich benutze es für MEDIA_URL und andere Sachen, aber vielleicht gibt es einige Konfiguration zu tun, damit es funktioniert "automatisch" ohne auf Python Seite zu verwalten

  2. Denken Sie, dass diese angepasste Ansicht (change_locale) ist der richtige Weg, um dieses Problem zu bewältigen? Oder gibt es irgendeine Art von automagischem Zeug wie für 1.?

  3. Es löst das Problem nicht, wenn ich die Adresse (http://www.example.com/MY_PREFIX/) in der Adressleiste eintippe. Wenn Anpassung der richtige Weg ist, werde ich das auch ändern, aber ich denke, es gibt eine bessere Lösung!

+0

Es scheint zu diesem Problem in localeURL Code-Repository verwandt: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –

Antwort

0

versuchen, diese (ich bin nicht sicher, ob es aber funktioniert):

 
WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 
im Grunde die Idee s zu machen django glauben, dass es kein Präfix

ist

aber Sie müssen sicherstellen, dass django die aussendet Korrigiere URLs in der HTML-Ausgabe.

3

Sie sollten SERVER_PREFIX in den Einstellungen nicht hart Verdrahtung sein. Das Mountpräfix für die Site ist als SCRIPT_NAME im WSGI-Umgebungswörterbuch verfügbar. Daher ist aus dem Speicher als request.META.get ('SCRIPT_NAME') verfügbar.

+0

Ich arbeite nicht mehr an diesem Projekt, aber Sounds ein guter Vorsprung! –