渲染JSON而不替换Jinja中的字符[重复]

Posted

技术标签:

【中文标题】渲染JSON而不替换Jinja中的字符[重复]【英文标题】:Render JSON without replacing characters in Jinja [duplicate] 【发布时间】:2015-07-30 16:11:36 【问题描述】:

我有一些 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 = ["color": "#5461ae", "name": "fizi.yadav", "value": 10, "color": "#e1dce4", "name": "surya.pradhan", "value": 30, "color": "#7835f0", "name": "fred.hsu", "value": 276]

【问题讨论】:

【参考方案1】:

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

使用Markup 将其标记为安全的。

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

或在模板中将其标记为安全。

 piedata|safe 

最好只在模板中进行转换,不要在视图中调用json.dumps。旧版本的 Flask 需要调用 |tojson|safe,但不再需要 |safe

 piedata|tojson 

【讨论】:

以上是关于渲染JSON而不替换Jinja中的字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用 JSON 字符串中的 hex 替换所有 r、g、b 值 [重复]

用 html/jquery 中的一个 JSON 字符串替换许多数据标签 [重复]

在 Pymongo 中创建集合之间的关系并渲染它 Jinja [重复]

使用 Jinja 将数据作为 JSON 对象从 Python 发送到 Javascript [重复]

Jinja 将引号转换为 &#39 [重复]

渲染 Jinja2 宏而不影响模板其余部分的内容