2011-03-02 4 views
0

J'ai mis à jour vers django 1.2 et je reçois maintenant ce message d'erreur qui ressemble à i18n. Pouvez-vous dire ce que je devrais faire? grâceProblèmes avec GAE + django 1.2

global name '_' is not defined 
Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 515, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/classifiedsmarket/blobstore.348713784647505124/i18n.py", line 252, in get 
    loginmsg = loginmsg + '<a href=\"%s\">%s</a>' % ('login',_("Log in")) 
NameError: global name '_' is not defined 

mise à jour après avoir ajouté la nouvelle déclaration d'importation, le code ressemble

# let user choose authenticator   
     for p in openIdProviders: 
      p_name = p.split('.')[0] # take "AOL" from "AOL.com" 
      p_url = p.lower()  # "AOL.com" -> "aol.com" 
      loginmsg = loginmsg + '<a href="%s">%s</a> ' % (#'','') 
      #  users.create_login_url(federated_identity=p_url), p_name) 
        'google.com', p_name) 
     loginmsg = loginmsg + '<a href=\"%s\">%s</a>' % ('login',_("Log in")) 

et dans le modèle

<ul><li><a href="ai">{% trans "Add" %}</a></li> 
    <li><a href="li">{{ latest.modified|date:"d M" }}</a></li>     
<li>{% if user %}<a href="{{ user_url|fix_ampersands }}">{% trans "Log out" %}</a> 
{% else %}{% trans "Log in" %}{{loginmsg}}{% endif %}</li> 
</ul> 

conduisant la jonque sur la vue comme l'image ici où l'attend la sortie est des liens et des boutons. Pourriez-vous en informer un peu plus? Merci

enter image description here

maintenant inspecté le code HTML, il semble que c'est quelque chose avec le codage escpae. Pourrais-tu dire?

<ul><li><a href="ai">Add</a></li><li><a href="li">03 Mar</a></li>     

<li>Log in&lt;a href=&quot;google.com&quot;&gt;Google&lt;/a&gt; &lt;a href=&quot;google.com&quot;&gt;Yahoo&lt;/a&gt; &lt;a href=&quot;google.com&quot;&gt;MySpace&lt;/a&gt; &lt;a href=&quot;google.com&quot;&gt;AOL&lt;/a&gt; &lt;a href=&quot;login&quot;&gt;Log in&lt;/a&gt;</li> 

</ul> 

Répondre

2

J'ai trouvé ceci au Old Django 1.0 manual (la version par défaut d'App Engine est 0.98 je pense).

voici la réponse:

TRADUCTION STANDARD:

module Bibliothèque gettext standard Python _ installs() dans l'espace de noms global, comme un alias pour gettext(). Dans Django, nous avons choisi de ne pas suivre cette pratique, pour plusieurs raisons:

Pour la prise en charge du jeu de caractères international (Unicode), ugettext() est plus utile que gettext(). Parfois, vous devriez utiliser ugettext_lazy() comme méthode de traduction par défaut pour un fichier particulier. Sans _() dans l'espace de noms global, le développeur doit réfléchir à la fonction de traduction la plus appropriée. Le caractère de soulignement (_) est utilisé pour représenter "le résultat précédent" dans les tests interactifs shell et doctest de Python. L'installation d'une fonction globale _() provoque des interférences. L'importation explicite de ugettext() en tant que _() évite ce problème.

Voilà pourquoi l'ancien fonctionne, quant à lui dans Django 1.2 vous devez spécifier:

from django.utils.translation import gettext_lazy as _ 

Niklas R suggéré.

+0

Merci Daniel. J'ai changé pour une déclaration d'importation comme ci-dessus, mais cela ne fonctionnera toujours pas. J'ai mis à jour la question avec plus d'informations en espérant que vous pouvez conseiller. –

+0

Je vais jeter un oeil à la nouvelle mise à jour ... –

2

On dirait que vous manquez

from django.utils.translation import gettext_lazy as _ 

mais je ne sais pas pourquoi il a travaillé dans la version précédente.

+0

Merci pour la réponse très informative. –