IntroduzioneDjango localeURL quando WSGIScriptAlias è/PREFIX
Ho una domanda sull'uso localeURL. Tutto funziona alla grande per me con url in questo modo: http://www.example.com/
Se digito http://www.example.com/ nella barra degli indirizzi, si scopre correttamente in http://www.example.com/en/ per esempio.
Se uso il change_locale vista, è anche tutto bene (vale a dire il cambiamento www.example.com/ en/a www.example.com/ fr /).
problema
Ma la mia applicazione uso Apache come server con mod_wsgi. Lo script httpd.conf contiene questa linea:
WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi
che dà URL come questo:
http://www.example.com/MY_PREFIX/
- Se scriv http://www.example.com/MY_PREFIX/ nella barra degli indirizzi, l'indirizzo si trasforma in http://www.example.com/en/ quando il risultato atteso dovrebbe be http://www.example.com/MY_PREFIX/en/
Lo stesso problema si è verificato con la vista change_locale. Ho modificato il codice al fine di gestire questo prefisso (negozio in 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
con questa visione personalizzata, io sono in grado di cambiare in modo corretto la lingua, ma non sono sicuro che sia il modo giusto di fare cose.
Domanda
quando, in httpd.conf si utilizza WSGIScriptAlias con/prefisso (vale a dire "/ Blog"), abbiamo bisogno, sul lato python di utilizzare una variabile (qui settings.SERVER_PREFIX) che corrisponde a WSGIScriptAlias? lo uso per MEDIA_URL e altre cose, ma forse c'è qualche configurazione da fare per farlo funzionare "automaticamente" senza doverlo gestire dal lato python
Pensi che questa vista personalizzata (change_locale) sia il modo giusto per gestire questo problema? O c'è qualche tipo di roba di automagia come per 1.?
Non risolve il problema se si digita l'indirizzo (http://www.example.com/MY_PREFIX/) nella barra degli indirizzi. Se la personalizzazione è la strada da percorrere, cambierò anche questo, ma penso che ci sia una soluzione migliore!
Sembra correlato a questo problema nel repository di codice localeURL: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –