5

J'ai des problèmes pour utiliser {% ifequal s1 "du texte"%} pour comparer des chaînes avec des caractères étendus dans les modèles Django. Lorsque la chaîne s1 contient des caractères ascii> 127, j'obtiens des exceptions dans le rendu du modèle. Qu'est-ce que je fais mal? J'utilise le codage UTF-8 dans le reste de l'application dans les données, les modèles et le code Python sans aucun problème.Problème avec l'encodage dans les modèles Django

views.py

def test(request): 
    return render_to_response("test.html", { 
              "s1": "dados", 
              "s2": "aprovação", 
              } 
          ) 

test.html

s1={{s1}}<br> 
s2={{s2}}<br> 

{% ifequal s1 "dados" %} 
    s1="dados" is true 
{% endifequal %} 

{% ifequal s1 "aprovação" %} 
    s1="aprovação" is true 
{% endifequal %} 

{% comment %} 
The following two comparions cause the following exception: 
Caught an exception while rendering: 'ascii' codec can't decode byte 0xc3 in position 6: ordinal not in range(128) 

{% ifequal s2 "dados" %} 
    s2="dados" is true 
{% endifequal %} 

{% ifequal s2 "aprovação" %} 
    s2="aprovação" is true 
{% endifequal %} 
{% endcomment %} 

{% ifequal s2 u"dados" %} 
    s2="dados" is true 
{% endifequal %} 

{% comment %} 
The following comparison causes the following exception: 
Caught an exception while rendering: 'ascii' codec can't encode characters in position 8-9: ordinal not in range(128) 
{% ifequal s2 u"aprovação" %} 
    s2="aprovação" is true 
{% endifequal %} 
{% endcomment %} 

Sortie

s1=dados 
s2=aprovação 
s1="dados" is true 

Répondre

8

il n'y a parfois rien comme la description d'un problème à quelqu'un d'autre pour vous aider à le résoudre. :) J'aurais dû marquer les chaînes Python comme Unicode comme ça et tout fonctionne maintenant:

def test(request): 
    return render_to_response("test.html", { 
              "s1": u"dados", 
              "s2": u"aprovação", 
              } 
          ) 
Questions connexes