Python 将JSON从flask传递到模板并解码html实体

Python 将JSON从flask传递到模板并解码html实体,python,html,json,flask,character-encoding,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> {{resu

所以我已经在这上面呆了一段时间了。我有一个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>


{{results_json}}

$(“#结果表”)。动态表({ 数据集:{ 记录:{{results\u json}} } });
问题在于,在脚本中,由于包含
"
这是双引号的实体值,但如果我检查源代码,它不应该显示为那样吗。html页面不应该将其显示为一个
”。这只发生在脚本部分。而不是在
标记中(该标记将所有
&34;
打印为


我误解了什么?

为了避免XSS攻击,flask和其他模板语言默认情况下会转义值:它将
转换为HTML实体,以便浏览器将其作为文本显示给用户,而不是HTML语法的一部分(例如
)。这发生在所有标记中:在
标记中,您可以在浏览器中看到引号,但源代码仍然是实体


要告诉flask不要转义,请使用
{results|json | safe}}
。这就是您断言值是安全的,而不是告诉flask使其安全(这是它以前所做的)。

要避免XSS攻击,flask和其他模板语言默认转义值:它转换
输入到HTML实体中,以便浏览器将其读取为要显示给用户的文本,而不是HTML语法的一部分(例如
)。这在所有标记中都会发生:在
标记中,您可以在浏览器中看到引号,但源代码仍然是实体


要告诉flask不要漏掉东西,请使用
{{results\u json | safe}
。这是您断言该值是安全的,而不是告诉flask使其安全(这是它以前所做的)。

非常感谢您。我被困在这上面太久了!非常感谢你!非常感谢你。我被困在这上面太久了!非常感谢你!