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

Django non-ASCII chars in template tags values

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

{% mytag "Hello" %}

工作完美,但在尝试将一些非 ASCII 字符放入值时失败。

你如何让这个东西工作:

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

我收到这个错误:

'ascii' codec can't encode character u'\xca' in position 0: ordinal not in range(128)

Unicode error hint

The string that could not be encoded/decoded was: Ê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)

尝试替换

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_var是一个unicode对象,一个解码字符串,当格式化,Python 将尝试对 my_var 进行编码,使其与格式化字符串的类型相匹配。默认情况下,它使用不支持特殊字符的 ascii 编解码器。

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

由于您看起来可能会说法语,因此我建议您阅读 this article,这是在 Python.

中编码的重要指南