2010-06-07 4 views
8

PrésentationDjango localeurl quand WSGIScriptAlias ​​est/PREFIX

I Got une question sur l'utilisation localeurl. Tout fonctionne très bien pour moi avec l'URL comme ceci: http://www.example.com/

  • Si je tape http://www.example.com/ dans la barre d'adresse, il se correctement http://www.example.com/en/ par exemple.

  • Si j'utilise la change_locale vue, il est aussi bien (à savoir le changement www.example.com/ en/en www.example.com/ fr /).

problème

Mais mon utilisation en tant que serveur apache l'application, avec mod_wsgi. Le script httpd.conf contient cette ligne:

WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi 

qui donne URL comme ceci:
http://www.example.com/MY_PREFIX/

Le même problème s'est produit avec la vue change_locale. J'ai modifié le code pour gérer ce préfixe (magasin à 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 

avec ce point de vue personnalisé, je suis en mesure de changer correctement la langue, mais je ne suis pas sûr que ce soit la bonne façon de faire des choses.

Question

  1. quand, en httpd.conf vous utilisez WSGIScriptAlias ​​avec/PREFIX (par exemple "/ Blog"), avons-nous besoin, sur le côté python pour utiliser une variable (ici settings.SERVER_PREFIX) qui correspondent à WSGIScriptAlias? je l'utilise pour MEDIA_URL et d'autres choses, mais peut-être y a-t-il une configuration à faire pour que ça fonctionne "automatiquement" sans avoir à gérer ça du côté python

  2. Pensez-vous que cette vue personnalisée (change_locale) est la bonne façon de gérer ce problème? Ou y a-t-il des trucs automagiques comme pour 1.?

  3. Il ne résout pas le problème si je tape l'adresse (http://www.example.com/MY_PREFIX/) dans la barre d'adresse. Si la personnalisation est la voie à suivre, je vais changer cela aussi, mais je pense qu'il y a une meilleure solution!

+0

Il semble lié à ce problème dans le référentiel de code de l'URLLocal: http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –

Répondre

0

essayer (je ne suis pas sûr que cela fonctionnera bien):

 
WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 
essentiellement la s idée de faire django croire qu'il n'y a pas de préfixe

mais vous devez vous assurer django émet le corriger les URL dans sa sortie HTML.

3

Vous ne devriez pas être en train de câbler SERVER_PREFIX dans les paramètres. Le préfixe de montage pour le site est disponible en tant que SCRIPT_NAME dans le dictionnaire WSGI environ. Ainsi de la mémoire est disponible en tant que request.META.get ('SCRIPT_NAME').

+0

Je ne travaille plus sur ce projet, mais ça sonne une bonne avance! –

Questions connexes