将 JSON 从烧瓶传递到模板并解码 html 实体 [重复]
Posted
技术标签:
【中文标题】将 JSON 从烧瓶传递到模板并解码 html 实体 [重复]【英文标题】:Pass JSON from flask to template and decode html entity [duplicate] 【发布时间】:2016-07-03 23:55:12 【问题描述】:所以我已经坚持了一段时间。我有一个 MongoDB,我查询并以 JSON 形式返回。
我这样做是:
bson.json_utils.dumps(list(all_exams.find(query))
然后我将它传递给一个烧瓶模板变量,以便在 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 无法通过 denotable 正确解析,因为它包含 &#34;
这是双引号的实体值,但如果我检查源代码,它不应该看起来像这样。 html 页面不应该将其显示为"
。这只发生在脚本部分。不在<p>
标记中(将所有&#34;
打印为"
)。
我误会了什么?
【问题讨论】:
【参考方案1】:为了避免 XSS 攻击,flask 和其他模板语言默认转义值:它将"
转换为 HTML 实体,以便浏览器将其读取为文本以显示给人类而不是 HTML 语法的一部分(例如<a href="...">
)。这发生在所有标签中:在 <p>
标签内,您会在浏览器中看到引号,但源代码仍然是实体。
要告诉烧瓶不要逃避东西,请使用results_json | safe
。那是您断言该值是安全的,而不是告诉烧瓶使其安全(这是它之前所做的)。
【讨论】:
非常感谢。我已经被困在这个问题上太久了! 非常感谢!以上是关于将 JSON 从烧瓶传递到模板并解码 html 实体 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Jinja2 模板在烧瓶中解码 ' [重复]