首页 > 解决方案 > 如何使 Jinja2 中的 tojson() 过滤器输出 Unicode 而不是转义序列?

问题描述

我的模板用于 JS

let SETTINGS = {{settings|tojson(4)}};

我的设置是 dict {'name': 'Russian name Саша', 'id': 12345}。如果我渲染它,我会得到:

let SETTINGS = {
    "name": "Russian name \u0421\u0430\u0448\u0430",
    "id": 12345
}

我需要获取非转义的 unicode 字符。我可以在 python 中使用相同的方式

json.dumps(data, encure_ascii=False)

但是tojson()filter 只接受一个参数(缩进)。

标签: javascriptpython-3.xunicodejinja2

解决方案


找到了一种tojson()过滤器提供剩余参数的方法。

从 Jinja 2.9 开始,可以在环境中配置策略,这可能会稍微影响过滤器和其他模板结构的行为方式。它们可以使用策略属性进行配置。

我所要做的就是:

env = jinja2.Environment()
env.policies['json.dumps_kwargs'] = {'ensure_ascii': False, 'sort_keys': True}

这个修改后的环境不会转义 unicode 符号。

结果可以在 JS 中安全使用,无需额外转义。


推荐阅读