cjo*_*318 6 python json flask d3.js
我正在使用Flask作为Web框架,我正在尝试实现Mike Dewar的D3入门一书中的第一个示例.我有一个名为Python脚本run.py和两个目录,templates/并static/包含index.html和service_status.json分别.不幸的是,我的代码根本没有渲染数据,也没有产生任何明显的错误.
这就是我所拥有的run.py:
#!/usr/bin/env python
from flask import Flask, render_template, url_for
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__=="__main__":
port = 5000
app.debug = True
app.run( port=port )
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的templates/index.html:
<!DOCTYPE HTML>
<HTML>
<HEAD>
<META CHARSET="utf-8">
<SCRIPT SRC="http://d3js.org/d3.v3.min.js"></SCRIPT>
<SCRIPT>
function draw(data) {
"use strict";
d3.select("body")
.append("ul")
.selectAll("li")
.data(data)
.enter()
.append("li")
.text( function(d){
return d.name + ": " + d.status;
}
);
}
</SCRIPT>
<TITLE>MTA Data</TITLE>
</HEAD>
<BODY>
<H1>MTA Availability Data</H1>
<SCRIPT>
d3.json("{{ url_for( 'static', filename='service_status.json') }}",draw); // <---- BIG PROBLEM
</SCRIPT>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
我使用的是Windows 7,谷歌浏览器和Python 2.7.
如果JSON文件不会更改,那么您应该将它放在static目录中并使用
from flask import url_for
url_for('static', filename='service_status.json')
Run Code Online (Sandbox Code Playgroud)
为此,还要将JavaScript中的路径更改为 '/static/service_status.json'
默认情况下,像 json 文档这样的静态文件是从与模板不同的目录提供的 -默认情况下为“static”
您不需要在视图中使用 url_for 调用,您可以在模板中使用它:
d3.json("{{ url_for('static', filename='service_status.json') }}",draw);
Run Code Online (Sandbox Code Playgroud)
总结一下:1) 将 json 文档移至静态文件夹(默认情况下,模板文件夹旁边名为 static 的文件夹),2) 在模板中使用 url_for 调用来获取 json 文档的正确 URI。
如果您想使用静态以外的文件夹,可以通过传递static_folder给 Flask 对象构造函数来更改它
| 归档时间: |
|
| 查看次数: |
4183 次 |
| 最近记录: |