2010-06-07 11 views
8

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/

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

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

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

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

+0

Sembra correlato a questo problema nel repository di codice localeURL: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –

risposta

0

provare questo (non sono sicuro se funzionerà però):

 
WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 
fondamentalmente l'idea s per fare Django credono che ci sia nessun prefisso

ma è necessario assicurarsi che Django emette il correggere gli URL nel suo output HTML.

3

Non è necessario collegare con difficoltà SERVER_PREFIX nelle impostazioni. Il prefisso di montaggio per il sito è disponibile come SCRIPT_NAME nel dizionario dell'ambiente WSGI. Quindi dalla memoria è disponibile come richiesta.META.get ('SCRIPT_NAME').

+0

Non sto più lavorando su questo progetto, ma suona un buon vantaggio! –

Problemi correlati