有什么办法可以将“ 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)


indentseparators参数是启用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/

10-10 02:58