5

Tengo problemas al usar {% ifequal s1 "some text"%} para comparar cadenas con caracteres extendidos en las plantillas de Django. Cuando la cadena s1 contiene caracteres ASCII> 127, obtengo excepciones en la representación de la plantilla. ¿Qué estoy haciendo mal? Estoy usando la codificación UTF-8 a lo largo del resto de la aplicación tanto en los datos, las plantillas y el código Python sin ningún problema.Problema con la codificación en las plantillas de 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 %} 

salida

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

Respuesta

8

A veces no hay nada como la descripción de un problema a otra persona para ayudar a resolverlo. :) Debería haber marcado las cadenas de Python como Unicode de esta manera y todo funciona ahora:

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