将JSON从烧瓶传递给模板并解码html实体

时间:2016-07-03 23:55:12

标签: python html json flask character-encoding

所以我一直坚持这一点。我有一个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无法正确解析,因为它包含&#34;这是双引号的实体值,但如果我检查源代码,它不应该是这样的码。不应该将html页面显示为"。这只发生在脚本部分。不在<p>标记中(将所有&#34;打印为")。

我误解了什么?

1 个答案:

答案 0 :(得分:2)

为了避免XSS攻击,烧瓶和其他模板语言默认转义值:它将"转换为HTML实体,以便浏览器将其作为文本显示为人类而不是HTML语法的一部分(例如<a href="...">)。这种情况发生在所有标签中:在<p>标签内,您可以在浏览器中看到引号,但源代码仍然是实体。

要告诉烧瓶不要逃脱,请使用{{results_json | safe}}。那就是你断言这个价值是安全的,并没有告诉烧瓶让它安全(这就是以前的做法)。