模板标签中的Django非ASCII字符值

时间:2015-05-29 13:47:50

标签: python django tags django-templates python-unicode

我正在为法语应用程序编写自定义Django模板标记。我的模板标记采用一个字符串参数:

{% mytag "Hello" %}

是否完美,但在尝试在值中放入一些非ASCII字符时失败。

你如何让这件事发挥作用:

{% mytag "Êtes-vous à Paris ?" %}

我收到了这个错误:

  

'ascii'编解码器无法对位置0中的字符u'\ xca'进行编码:序数   不在范围内(128)

     

Unicode错误提示

     

无法编码/解码的字符串是:Êtes-v

非常感谢!

编辑: Python版本 2.7 。以下是代码的代码:

@register.simple_tag(takes_context=True)
def mytag(context, my_var):
    return "Here it is: {my_var}".format(my_var=my_var)

1 个答案:

答案 0 :(得分:1)

尝试替换

return "Here it is: {my_var}".format(my_var=my_var)

通过

return u"Here it is: {my_var}".format(my_var=my_var)

在Python 2.7中,"Here it is: {my_var}"str对象,编码字符串,my_varunicode对象,解码后的字符串,格式化时,Python会尝试编码my_var,使其与格式化字符串的类型相匹配。它默认使用ascii编解码器,不支持特殊字符。

在格式化字符串之前添加u使其成为unicode字符串,格式化期间不会进行编码。

由于您可能会说法语,我建议您阅读this article,这是Python编码的一个很好的指南。