python - 在不替换 Jinja 中的字符的情况下渲染 JSON

标签 python json flask jinja2

<分区>

我有一些 Python 数据将被发送到 JavaScript 图表。我将它转储到 JSON 并将其传递给模板。当我呈现数据时,它包含 html 实体 (") 而不是引号,这是无效的。如何正确地将 JSON 数据从 Python 传递到 JavaScript?

pieData = [{'color': '#400068', 'name': 'xyz', 'value': 10}, {'color': '#4a8624', 'name': 'abc', 'value': 30}]
render_template('index.html', piedata=json.dumps(pieData))
var pieData2 = {{ piedata }};
// renders as
var pieData2 = [{&#34;color&#34;: &#34;#5461ae&#34;, &#34;name&#34;: &#34;fizi.yadav&#34;, &#34;value&#34;: 10}, {&#34;color&#34;: &#34;#e1dce4&#34;, &#34;name&#34;: &#34;surya.pradhan&#34;, &#34;value&#34;: 30}, {&#34;color&#34;: &#34;#7835f0&#34;, &#34;name&#34;: &#34;fred.hsu&#34;, &#34;value&#34;: 276}]

最佳答案

Jinja 自动转义可能不安全的字符(例如引号)以避免安全问题。您需要告诉它您正在呈现的数据是安全的,方法是在模板中使用 |safe 过滤器,或者在 View 中将其包装在 Markup 中。您还可以使用 |tojson 过滤器,而不是手动解析和标记 JSON。

使用 Markup 将其从 View 中标记为安全。

from markupsafe import Markup
render_template('index.html', piedata=Markup(json.dumps(pieData)))

或者在模板中标记为安全。

{{ piedata|safe }}

最好直接在模板中转换,而不在 View 中调用json.dumps。旧版本的 Flask 需要调用 |tojson|safe,但不再需要 |safe

{{ piedata|tojson }}

关于python - 在不替换 Jinja 中的字符的情况下渲染 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728937/

相关文章:

python - flask 属性错误 : module 'app' has no attribute 'run'

python - 在 Flask-Admin 中修改输入字段大小

python - 列表中子列表中特定位置中给定项目的计数

java - Jackson - 仅序列化 Java Pojo 的列表属性中的对象 ID

python - 我如何从 python 程序而不是代理中找到面向公众的 ip

jquery - 在html和jquery中获取表的列值的总数

json - 从 Go 中的 json 文件中读取多个 json 对象

python - Flask Python 中的无效登录逻辑

python - 如何将单个位写入python中的文本文件?

python - 随机遍历有向图