问题描述
我的模板用于JS
let SETTINGS = {{settings|tojson(4)}};
我的设置是字典 {'name':'Russian nameСаша','id':12345}
.如果我渲染它,我得到:
My settings is a dict {'name': 'Russian name Саша', 'id': 12345}
. If I render it, i get:
let SETTINGS = {
"name": "Russian name \u0421\u0430\u0448\u0430",
"id": 12345
}
我需要获取非转义的unicode字符.我可以使用
I need to get non-escaped unicode characters. The same way I can do in python using
json.dumps(data, encure_ascii=False)
但是 tojson()
过滤器仅接受一个参数(缩进).
But tojson()
filter accepts only one parameter (indent).
推荐答案
Found a way to supply rest parameters to tojson()
filter.
从Jinja 2.9开始,政策可以在这种环境可能会稍微影响过滤器和其他模板构造的行为.可以使用policy属性配置它们.
Starting with Jinja 2.9 policies can be configured on the environment which can slightly influence how filters and other template constructs behave. They can be configured with the policies attribute.
我所要做的:
env = jinja2.Environment()
env.policies['json.dumps_kwargs'] = {'ensure_ascii': False, 'sort_keys': True}
此修改后的环境不会转义unicode符号.
This modified environment will not escape unicode symbols.
可以在JS中安全地使用结果,而无需进行其他转义.
The result can be safely used in JS without additional escaping.
这篇关于如何使Jinja2输出Unicode而不是转义序列中的tojson()过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!