栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript用Jinja模板中呈现的数据引发SyntaxError

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript用Jinja模板中呈现的数据引发SyntaxError

Flask的Jinja环境会自动转义HTML模板中呈现的数据。如果开发人员尝试呈现不受信任的用户输入,这将避免安全问题。

由于要传递的Python对象被视为JSON,因此Flask提供了

tojson
过滤器,该过滤器会自动将数据转储到JSON并将其标记为安全。

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

当您仅查看HTML呈现的数据时,它看起来是正确的,因为浏览器将转义的符号显示为真实符号(尽管在这种情况下,您看到的是Python
dict的字符串表示形式,而不是JSON,因此仍然存在一些问题像

u
标记)。

以前版本的Flask并未将转储的数据标记为安全,因此您可能会遇到像这样的示例

{{ tree|tojson|safe }}
,现在不再需要。


如果您不渲染JSON(或者您已经将JSON转储到字符串中),则可以通过使用

safe
过滤器来告诉Jinja数据可以安全地渲染而无需转义。

# already dumped to json, so tojson would double-enpre itreturn render_template('tree.html', tree=json.dumps(tree))var tree = {{ tree|safe }};

您还可以

Markup
在渲染字符串之前将其包装起来,这等效于
safe
过滤器。

# already dumped and marked safereturn 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 %}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/420582.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号