有什么办法可以将“ jsonify”存储在变量中?我不喜欢执行“返回jsonify(data)”的纯json格式,但是我喜欢缩进,因此我尝试使用呈现的HTML模板对其进行修饰。这是我的python代码:
from flask import Flask, jsonify, render_template
app = Flask(__name__)
@app.route("/")
def return_json():
data = {"One": 1, "Two": 2, "Three": 3, "Letters": ['a', 'b', 'c']}
html_item = jsonify(data)
return render_template("file.html", html_item=html_item)
if __name__ == "__main__":
app.run()
这是我的HTML文件(目前非常基本)(file.html):
<html>
{{ html_item }}
</html>
这是我在浏览器上通过http://127.0.0.1:5000/获得的输出
<Response 92 bytes [200 OK]>
如果没有办法将jsonify存储在变量中,是否有人知道我如何在浏览器中以漂亮的方式显示“数据”?我能弄清楚的是(1)jsonify和(2)“返回数据”,这与jsonify相同,只是没有缩进。
最佳答案
jsonify()
生成一个响应对象,其中包含JSON数据。从flask.json.jsonify()
documentation:
此函数包装dumps()
以添加一些增强功能,使生活更轻松。它将JSON输出转换为具有Response
模仿类型的application/json
对象。
大胆强调我的。当您的路线应该产生JSON作为最终结果时,这非常有用,而当您想在模板中使用JSON数据时,这并不是很有用。
您可以直接使用flask.json.dumps()
:
from flask import json
@app.route("/")
def return_json():
data = {"One": 1, "Two": 2, "Three": 3, "Letters": [a, b, c]}
html_item = json.dumps(data, indent=2, separators=(', ', ': '))
return render_template("file.html", html_item=html_item)
indent
和separators
参数是启用flask.json.jsonify()
(默认)且不是AJAX请求时JSONIFY_PRETTYPRINT_REGULAR
使用的参数。或者,使用
tojson
filter将数据转换为模板中的JSON:<html>
{{ data|tojson|safe }}
</html>
假定
data
是传递给模板的,而不是html_item
JSON字符串。还要注意在那里使用safe
过滤器;这样可以确保您获得可以通过JavaScript代码而不是HTML换码版本加载的未换码JSON数据。您可以将相同的配置传递给该过滤器:
<html>
{{ data|tojson(indent=2, separators=(', ', ': '))|safe }}
</html>
关于python - 在用于HTML文件的变量上调用jsonify会错误地呈现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39151472/