首页 > 解决方案 > 如何将 JSON 对象传递给 Flask 中的模板?

问题描述

我一直在 Flask 中开发一个网站,最近开始重构我的路由以适应 API 框架。但是,我无法使用 Flask 的渲染模板将 JSON 数据从我的 API(来自在 API 中调用 Flask)传递到视图中jsonify()dict

例如,如果没有 API,视图函数的返回看起来像

return render_template('project.html', name=proj.name, description=proj.description, tags = proj.tag_list ...) 

使用 API,模型的所有相关数据都包含在 JSON 对象中,我一直在尝试以下形式:

return render_template('project.html', jsonobj=api.project.get_project(project_id))

关联的 API 函数在哪里

def get_project(id):
    return jsonify(Project.query.get_or_404(id).to_dict())

但是,数据无法正确呈现在 HTML 中。如果我将字典传递给 jsonobj - 即Project.query.get_or_404(id).to_dict()- 数据将呈现。但我不想将 JSON 重新转换为字典,因为这是一个额外的步骤。

编辑:我意识到我可能不应该使用render_template()将数据传递给 html 并填充页面(如在此处找到)。似乎如果我正在构建一个 API,我应该从 JavaScript 填充我的 HTML。但是我不确定使用 Flask 最好的方法是什么,虽然我发现一些相关的线程不确定最佳解决方案是什么。

标签: pythonjsonrestflask

解决方案


无论哪种方式,您都可以这样做,创建一个字典,然后将其作为参数传递,或者您可以使用 JSON 库进行转储,然后将其发送到前端。

data = data.to_json(orient="split")
data = json.loads(data)
data = json.dumps(data)
data = {
    "data":data
}
return data

它适用于我的情况,看看并让我知道它是否不起作用,会解决这个问题。


推荐阅读