破解 Jinja2 以从 utf-8 而不是 ascii 编码?

Hack Jinja2 to encode from `utf-8` instead of `ascii`?

Jinja2 在处理之前将所有模板变量转换为 unicode。谁能找到发生这种情况的地方?

问题是它假定字符串是 ascii,但我们(在 Roundup)在内部使用 utf-8 并且我们的 ORM (HyperDB) 自动将对象属性恢复为 utf-8 ,并在传递给模板之前在每个视图中将它们全部转换为 unicode 是太多的跑腿工作。

Armin 的回答:

Unfortunately that is impossible. Jinja uses the default string coercion on 2.x that Python provides for speed. There are no guaranteed calls to make something unicode. The only shitty choice you have is to reload sys and call sys.setdefaultencoding('utf-8') or something.

更新:Jinja2 2.8 包含一些与隐式字符串转换相关的更新。这让我想到,可以通过覆盖 unicode 类型的 __add__ 方法而没有 sys.setdefaultencoding('utf-8'),并确保在连接字符串时首先使用它的类型。

https://github.com/mitsuhiko/jinja2/issues/511