将静态 json 数据提供给烧瓶

Posted

技术标签:

【中文标题】将静态 json 数据提供给烧瓶【英文标题】:Serving static json data to flask 【发布时间】:2015-03-06 01:23:47 【问题描述】:

我在 demo_data.json 中有我想带入 Flask 应用程序的 json 数据。我在放置在静态目录中的文件上收到 404,我的代码如下,提前感谢您的任何想法:

from flask import Flask, render_template
from flask import url_for

app = Flask(__name__, static_url_path='/static/')
@app.route('/')
def home():
    return render_template('home.html')
@app.route('/welcome')
def welcome():
    return render_template('welcome.html')
if __name__ == '__main__':
    app.run()
    return send_from_directory('/static', 'demo_data.json')

【问题讨论】:

添加你的项目的目录结构(包括你的 json 文件的位置)和你发送给 Flask 以请求这个 json 数据的 URL。 【参考方案1】:

您需要定义视图以发送数据。

类似于:

from flask import Flask, render_template
from flask import url_for

app = Flask(__name__, static_url_path='/static/')
@app.route('/')
def home():
    return render_template('home.html')
@app.route('/welcome')
def welcome():
    return render_template('welcome.html')

@app.route('data/<filename>')
def get_json(filename):
    return send_from_dir

if __name__ == '__main__':
    app.run()

【讨论】:

【参考方案2】:

那么,您正在尝试发送文件?或者在 url 中显示文件? 我假设是后者。注意 url_for 的使用。 这将创建一个链接来显示您的静态文件。

http://127.0.0.1:5000/sendhttp://127.0.0.1:5000/static/demo_data.json

from flask import Flask, render_template
from flask import url_for

app = Flask(__name__, static_url_path='/static')


@app.route('/')
def home():
    return render_template('home.html')


@app.route('/send')
def send():
    return "<a href=%s>file</a>" % url_for('static', filename='demo_data.json')


if __name__ == '__main__':
    app.run()

但您可能还想查看https://github.com/cranmer/flask-d3-hello-world

【讨论】:

谢谢,我确实在127.0.0.1:5000/static/demo_data.json 返回数据但是我正在尝试渲染这些数据,以便我可以使用 D3 并将其可视化,这就是我希望它在家里渲染的原因。 html页面。我应该重组我将如何使用 D3 或尝试替代方法将文件发送到 home.html?感谢您的帮助! 嗯,我认为你有很多不同的可能性。您也可以使用 AJAX 加载文件,这就是我要做的。但您可能还想查看github.com/cranmer/flask-d3-hello-world 这看起来与我正在做的事情非常相关,谢谢!【参考方案3】:

看起来您的 static_url_path 上有一个斜杠。删除多余的字符解决了这个问题。还要注意删除的最后一行。 return 调用不是必需的,return 之后的函数调用是语法错误。

from flask import Flask, render_template
from flask import url_for

app = Flask(__name__, static_url_path='/static')
@app.route('/')
def home():
    return render_template('home.html')
@app.route('/welcome')
def welcome():
    return render_template('welcome.html')
if __name__ == '__main__':
    app.run()

【讨论】:

以上是关于将静态 json 数据提供给烧瓶的主要内容,如果未能解决你的问题,请参考以下文章

typescript静态属性,静态方法,抽象类,多态

在节点中从文件与数据库中提供内容

SpringMVC返回JSON数据以及文件上传过滤静态资源

从请求中检索帖子数据的烧瓶速度很慢?

将Json数据保存在静态脚本文件中读取

将 JSON 从烧瓶传递到模板并解码 html 实体 [重复]