在不替换 Jinja 中的字符的情况下渲染 JSON
Render JSON without replacing characters in Jinja
我有一些 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}]
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 }}
我有一些 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}]
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 }}