2010-06-07 9 views
8

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/

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

  1. 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

  2. ¿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.?

  3. 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!

+0

Parece relacionado con este problema en el repositorio de código localeURL: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –

Respuesta

0

probar esto (no estoy seguro de si funcionará sin embargo):

 
WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 
básicamente la idea s de que Django creen que no hay prefijo

pero hay que asegurarse de Django emite el corregir las URL en su salida HTML

3

No debe haber un cableado de SERVER_PREFIX en la configuración. El prefijo de montaje para el sitio está disponible como SCRIPT_NAME en el diccionario de entorno WSGI. Por lo tanto, desde la memoria está disponible como request.META.get ('SCRIPT_NAME').

+0

No trabajo más en este proyecto, pero suena una buena ventaja! –

Cuestiones relacionadas