Flask视图中json.dumps返回内容渲染模板出现无效JSON问题
问题成因
- 该问题是Jinja2模板引擎的默认HTML自动转义机制导致的:默认配置下,所有通过
{{ }}语法输出到模板的内容,都会被自动转义HTML特殊字符,避免XSS攻击。双引号"对应的HTML实体编码就是",因此你用json.dumps生成的JSON字符串里的所有双引号都被转义,最终渲染出来的就是无法被JS识别的无效代码。
解决方案
你可以任选以下任意一种方法修复:
- 方法一:模板输出时添加
safe过滤器,明确告知Jinja2该内容不需要转义,直接输出即可:
修改模板代码为:<script> console.log({{ data|safe }}); </script> - 方法二(更推荐):无需手动在后端做JSON序列化,直接传递原始Python对象到模板,使用Jinja2内置的
tojson过滤器自动处理序列化和转义逻辑:
后端代码修改为:
模板代码修改为:products_list: list = [{"product_name": "product #1"}, {"product_name": "product #2"}] return render_template('index.html', data=products_list)
该方案不需要你手动处理序列化逻辑,安全性更高,也不会出现转义冲突问题。<script> console.log({{ data|tojson }}); </script>
内容的提问来源于stack exchange,提问作者wesose1216
相关产品推荐
相关产品推荐

