所以我一直坚持这一点。我有一个MongoDB,我查询并返回JSON。
我是这样做的:
bson.json_utils.dumps(list(all_exams.find(query))
然后我将它传递给一个flask模板变量,用于HTML中的内联js脚本。
<div id="results">
<table id="results-table">
</table>
<p>
{{results_json}}
</p>
</div>
<script type="text/javascript" charset="utf-8">
$('#results-table').dynatable({
dataset: {
records: {{results_json}}
}
});
</script>
问题是在脚本中,JSON无法正确解析,因为它包含"
这是双引号的实体值,但如果我检查源代码,它不应该是这样的码。不应该将html页面显示为"
。这只发生在脚本部分。不在<p>
标记中(将所有"
打印为"
)。
我误解了什么?
答案 0 :(得分:2)
为了避免XSS攻击,烧瓶和其他模板语言默认转义值:它将"
转换为HTML实体,以便浏览器将其作为文本显示为人类而不是HTML语法的一部分(例如<a href="...">
)。这种情况发生在所有标签中:在<p>
标签内,您可以在浏览器中看到引号,但源代码仍然是实体。
要告诉烧瓶不要逃脱,请使用{{results_json | safe}}
。那就是你断言这个价值是安全的,并没有告诉烧瓶让它安全(这就是以前的做法)。