IntroducciónDjango localeURL cuando es WSGIScriptAlias / PREFIJO
Tengo una pregunta acerca del uso de localeURL. Todo funciona muy bien para mí con URL como esta: http://www.example.com/
Si escribo http://www.example.com/ en la barra de direcciones, se convierte correctamente en http://www.example.com/es/ por ejemplo.
Si utilizo la vista change_locale, también es bien (es decir, cambio www.example.com/ en/en www.example.com/ fr /).
problema
Pero mi aplicación de uso Apache como servidor, con mod_wsgi. El guión httpd.conf contenga esta línea:
WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi
que da URL como esta:
http://www.example.com/MY_PREFIX/
- Si escribo http://www.example.com/MY_PREFIX/ en la barra de direcciones, la dirección se convierte en http://www.example.com/en/ cuando el resultado esperado debería ser http://www.example.com/MY_PREFIX/en/
Ocurrió el mismo problema con la vista change_locale. He modificado el código con el fin de gestionar este prefijo (tienda en 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 este punto de vista personalizada, soy capaz de cambiar correctamente el lenguaje, pero no estoy seguro de que es la manera correcta de haciendo cosas.
Pregunta
cuando, en httpd.conf utiliza con WSGIScriptAlias / prefijo (es decir, "/ Blog"), qué necesitamos, en el lado del pitón de utilizar una variable (en este caso settings.SERVER_PREFIX) que coinciden con WSGIScriptAlias? Lo uso para MEDIA_URL y otras cosas, pero tal vez hay alguna configuración que hacer para que funcione "automáticamente" sin tener que administrar esto en el lado de Python
¿Cree que esta vista personalizada (change_locale) es la forma correcta de manejar este problema? ¿O hay algún tipo de cosas automágicas en cuanto a 1.?
No resuelve el problema si escribo la dirección (http://www.example.com/MY_PREFIX/) en la barra de direcciones. Si la personalización es el camino a seguir, también lo cambiaré, ¡pero creo que hay una mejor solución!
Parece relacionado con este problema en el repositorio de código localeURL: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –