python - 如何将 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 最好的方法是什么,虽然我发现一些相关的线程不确定最佳解决方案是什么。
解决方案
无论哪种方式,您都可以这样做,创建一个字典,然后将其作为参数传递,或者您可以使用 JSON 库进行转储,然后将其发送到前端。
data = data.to_json(orient="split")
data = json.loads(data)
data = json.dumps(data)
data = {
"data":data
}
return data
它适用于我的情况,看看并让我知道它是否不起作用,会解决这个问题。
推荐阅读
- matlab - 如何使用 fzero() 在 MATLAB 中求解多项式方程?
- laravel - 如何散列最后一个插入ID并设置到请求中然后保存到laravel中的db中。?
- javascript - 我在 javascript 中遇到 DOM 的问题
- scala - 如何在 Play 中获取原始请求正文?
- android - Google Play 64 位要求 Gamemaker Studio
- javascript - 角度如何使用查询列表对象?
- java - 在控制台中使用在 Eclipse 中创建的包运行代码
- javascript - 如何获得此加载屏幕效果
- java - 如何实现一种以异步方式处理服务超时的方法?
- runtime - 如何在运行时设置 Phaser 3 游戏的背景颜色?