首页 >后端开发 >Python教程 >如何在 JavaScript 中安全地使用从 Jinja 模板渲染的 JSON 数据?

如何在 JavaScript 中安全地使用从 Jinja 模板渲染的 JSON 数据?

DDD
DDD原创
2025-01-05 16:46:39549浏览

How to Safely Use JSON Data Rendered from a Jinja Template in JavaScript?

JavaScript 对 Jinja 模板中渲染的数据引发语法错误

问题:

尝试利用 Jinja 中渲染的 JSON 数据JavaScript 中的模板失败并显示“SyntaxError: Unexpected token '&'”。错误。如何在 JavaScript 中有效地使用渲染的 JSON 数据?

解决方案:

出于安全目的,Flask 的 Jinja 环境本质上会对 HTML 模板中渲染的数据进行转义。当传递要解释为 JSON 的 Python 对象时,应使用 tojson 过滤器来适当地转换数据并将数据标记为安全:

return render_template('tree.html', tree=tree)
var tree = {{ tree|tojson }};

如果 JSON 未渲染或之前已转换为一个字符串,可以使用安全过滤器或标记包装器来确保安全渲染:

# already dumped to json
return render_template('tree.html', tree=json.dumps(tree))
var tree = {{ tree|safe }};
# already dumped and marked safe
return render_template('tree.html', tree=Markup(json.dumps(tree)))
var tree = {{ tree }};

或者,如果数据仅在 Jinja 中使用并且不传递给 JavaScript,则不需要 JSON。原始Python数据可以直接在模板中传递使用:

return render_template('tree.html', tree=tree)
{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}

以上是如何在 JavaScript 中安全地使用从 Jinja 模板渲染的 JSON 数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn