如何使 Jinja2 中的 tojson() 过滤器输出 Unicode 而不是转义序列?

Ale*_*hen 3 javascript unicode jinja2 python-3.x

我的模板是用于JS的

\n\n
let SETTINGS = {{settings|tojson(4)}};\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的设置是一个 dict {\'name\': \'Russian name \xd0\xa1\xd0\xb0\xd1\x88\xd0\xb0\', \'id\': 12345}。如果我渲染它,我会得到:

\n\n
let SETTINGS = {\n    "name": "Russian name \\u0421\\u0430\\u0448\\u0430",\n    "id": 12345\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
json.dumps(data, encure_ascii=False)\n
Run Code Online (Sandbox Code Playgroud)\n\n

tojson()过滤器只接受一个参数(缩进)。

\n

Ale*_*hen 9

有一种方法可以为tojson()过滤器提供剩余参数。

从 Jinja 2.9 开始,可以在环境中配置策略,这会影响过滤器和其他模板构造的行为方式。可以通过更改策略属性的一些键来完成。

对于你的情况,有json.dumps_kwargs政策。这是你必须做的:

env = jinja2.Environment()
env.policies['json.dumps_kwargs']['ensure_ascii'] = False
Run Code Online (Sandbox Code Playgroud)

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