【问题标题】:Django non-ASCII chars in template tags values模板标签值中的 Django 非 ASCII 字符
【发布时间】:2015-08-12 10:07:59
【问题描述】:

我正在为一个法语应用程序编写一个自定义 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)

【问题讨论】:

  • 哪个python版本?你能告诉我们标签的代码吗?
  • 看看这是否有帮助stackoverflow.com/a/13986802/2445183
  • Python 版本为 2.7。在初始帖子中添加了标记代码。谢谢你的帮助……
  • 已经在标签声明文件中添加了# -- coding: utf-8 --。好像 Django 不允许在标签中传递特殊字符:(
  • @danihp 请不要随意推荐。编码头用于源代码中的文字,与此问题无关。

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


【解决方案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 编码指南。

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2017-05-15
    • 2014-07-25
    • 2010-10-25
    • 2010-12-19
    相关资源
    最近更新 更多