JavaScript 使用 Jinja 模板中呈现的数据引发 SyntaxError
- 2024-11-28 08:37:00
- admin 原创
- 9
问题描述:
我正在尝试将数据作为 JSON 从 Flask 路由传递到 Jinja 模板渲染 JavaScript。我想使用 JavaScript 迭代数据。浏览器显示SyntaxError: Unexpected token '&'. Expected a property name.
何时JSON.parse
调用渲染的数据。如何在 JavaScript 中使用渲染的 JSON 数据?
var obj = JSON.parse({{ data }})
for (i in obj){
document.write(obj[i].text + "<br />");
}
def get_nodes(node):
d = {}
if node == "Root":
d["text"] = node
else:
d["text"] = node.name
getchildren = get_children(node)
if getchildren:
d["nodes"] = [get_nodes(child) for child in getchildren]
return d
tree = get_nodes("Root")
return render_template("folder.html", data=tree)
如果我只输入{{ data }}
HTML 部分,我看到的内容看起来是正确的。
{'text': 'Root', 'nodes': [{'text': u'Prosjekt3'}, {'text': u'Prosjekt4', 'nodes': [{'text': u'mappe8'}]}]}
解决方案 1:
Flask 的 Jinja 环境会自动转义 HTML 模板中呈现的数据。这是为了避免开发人员尝试呈现不受信任的用户输入时出现安全问题。
由于您传递了一个要作为 JSON 处理的 Python 对象,因此 Flask 提供了tojson
过滤器,它会自动将数据转储为 JSON 并将其标记为安全。
return render_template('tree.html', tree=tree)
var tree = {{ tree|tojson }};
当您仅查看 HTML 中呈现的数据时,它看起来是正确的,因为浏览器将转义的符号显示为真实符号(尽管在这种情况下您看到的是 Python 字典的字符串表示,而不是 JSON,因此仍然存在一些问题,例如u
标记)。
以前版本的 Flask 没有将转储的数据标记为安全,因此您可能会遇到类似的例子{{ tree|tojson|safe }}
,但这些例子不再需要了。
如果您不渲染 JSON(或者您已经将 JSON 转储为字符串),则可以通过使用safe
过滤器告诉 Jinja 数据可以安全渲染而无需转义。
# already dumped to json, so tojson would double-encode it
return render_template('tree.html', tree=json.dumps(tree))
var tree = {{ tree|safe }};
您还可以Markup
在渲染字符串之前将其包装起来,这相当于safe
过滤器。
# already dumped and marked safe
return render_template('tree.html', tree=Markup(json.dumps(tree)))
var tree = {{ tree }};
如果您不将此数据传递给 JavaScript,而是在 Jinja 中使用它,则不需要 JSON。传递实际的 Python 数据,不要调用tojson
它,并像使用模板中的任何其他数据一样使用它。
return render_template('tree.html', tree=tree)
{% for item in tree %}
<li>{{ item }}</li>
{% endfor %}
解决方案 2:
我可以使用以下代码示例将其存档。
<script>
console.log(JSON.parse({{json|safe}}))
</script>
解决方案 3:
问题是您的服务器返回的不是 JSON,而是呈现的 HTML,它使用 & 符号转义了一些符号。
而不是使用
return render_template("folder.html", data=tree)
尝试
return flask.jsonify(**tree)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件