首页 >web前端 >js教程 >从 Jinja 模板渲染 JSON 数据时,为什么我的 JavaScript 会出现语法错误?

从 Jinja 模板渲染 JSON 数据时,为什么我的 JavaScript 会出现语法错误?

Susan Sarandon
Susan Sarandon原创
2024-12-11 21:37:10357浏览

Why Does My JavaScript Get a SyntaxError When Rendering JSON Data from a Jinja Template?

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

简介

当将 JSON 数据从 Flask 路由传递到 Jinja 模板时,浏览器可能会抛出语法错误:意外的标记“&”。渲染数据时需要属性名称。了解如何在 JavaScript 中处理渲染的 JSON 数据对于成功处理模板至关重要。

转义和 JSON 渲染

Flask 的 Jinja 环境会自动转义 HTML 模板中渲染的数据以防止安全漏洞。对于需要被视为 JSON 的数据,Flask 提供了 tojson 过滤器,它将数据转储为 JSON 并将其标记为安全。使用 tojson 过滤器可确保数据在不转义的情况下呈现,从而使其能够在 JavaScript 中正确解析。

tree = get_nodes("Root")
return render_template("folder.html", data=tree|tojson)
var tree = {{ tree|tojson }};

或者,在较旧的 Flask 版本中,安全过滤器可用于标记数据安全:

var tree = {{ tree|tojson|safe }};

使用安全过滤器

如果数据已经转储为 JSON,安全过滤器可用于将其标记为安全渲染而无需转义:

return render_template('tree.html', tree=json.dumps(tree))
var tree = {{ tree|safe }};

将 JSON 字符串包装在 Markup 中也相当于使用安全过滤器:

return render_template('tree.html', tree=Markup(json.dumps(tree)))
var tree = {{ tree }};

在 Jinja 中使用 Python 数据

如果数据没有被传递到JavaScript 但在 Jinja 中使用,可以省略 JSON 渲染,直接使用 Python 数据:

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

以上是从 Jinja 模板渲染 JSON 数据时,为什么我的 JavaScript 会出现语法错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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