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

3

我的模板用于JS。

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

我的设置是一个字典 {'name': '俄文名 Саша', 'id': 12345}。如果我进行渲染,会得到:

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

我需要获取非转义的 Unicode 字符。在 Python 中,我可以使用以下方式实现:

json.dumps(data, encure_ascii=False)

但是tojson()过滤器只接受一个参数(indent)。

1个回答

9

有一种方法可以向tojson()过滤器提供rest参数。

从Jinja 2.9开始,policies可以在环境上配置,影响过滤器和其他模板结构的行为。这可以通过更改policies属性的某些键来实现。

对于您的情况,有一个json.dumps_kwargs策略。你需要做的是:

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

这个修改后的环境不会忽略Unicode符号。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接