python-3.x 如何让Jinja2中的tojson()filter输出Unicode而不是转义序列?

k10s72fa  于 2023-02-26  发布在  Python
关注(0)|答案(1)|浏览(203)

我的模板用于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()过滤器只接受一个参数(缩进)。

rbl8hiat

rbl8hiat1#

有一种方法可以为tojson()过滤器提供rest参数。
从Jinja 2.9开始,可以在环境中配置策略来影响过滤器和其他模板结构的行为。这可以通过改变policies属性的一些键来完成。
对于您的情况,存在json.dumps_kwargs策略。这是您必须执行的操作:

env = jinja2.Environment()
env.policies['json.dumps_kwargs']['ensure_ascii'] = False

此修改的环境将不会转义unicode符号。
结果可以安全地在JS中使用,无需额外转义。

相关问题