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/
- Wenn ich http://www.example.com/MY_PREFIX/ in die Adressleiste eingeben, die Adresse verwandelt sich in http://www.example.com/en/ wenn das erwartete Ergebnis sollte be http://www.example.com/MY_PREFIX/en/
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
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
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.?
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!
Es scheint zu diesem Problem in localeURL Code-Repository verwandt: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –