所以我对整个web和Flask编程是个新手。我一直在很好地在网页中显示数据库中的信息,然后我混合了一点java脚本。但后来因为我在互联网上读到的内容,我萌生了像一样组织我的URL的想法
- localhost:5000/data/每日
- localhost:5000/data/周
- localhost:5000/data/每月
然而,当我将URL设置为一级以上时,当flask调出页面时,我最终会出现java脚本错误,因为这些额外的级别已附加到我的脚本标记中的src属性路径中。
那么这里发生了什么?是不是我缺少一些基本的网络编程知识?我在下面添加了一些代码,显示了我遇到的例子。
以下文件位于以下文件夹配置中
project_root
├── app.py
├── static
│ └── js
│ └── clock.js
└── templates
├── clock.html
└── index.html
应用程序
import flask
app = flask.Flask(__name__)
@app.route('/clock')
def clock():
return flask.render_template('clock.html')
@app.route('/deep/clock')
def deep_clock():
return flask.render_template('clock.html')
if __name__ == '__main__':
app.run(debug=True)
clock.html
<!DOCTYPE html>
<html>
<head>
<script src="static/js/clock.js"></script>
</head>
<body onload="startTime()">
<div id="txt"></div>
</body>
</html>
clock.js
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
document.getElementById('txt').innerHTML =
h + ":" + m + ":" + s;
var t = setTimeout(startTime, 500);
}
function checkTime(i) {
if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10
return i;
}
因此,如果你复制所有内容并运行app.py,那么
- localhost:5000/dept/clock将失败
和
- localhost:5000/clock工作
那么这里发生了什么?我需要做些什么才能让它们都在当前配置中工作?
当你运行应用程序时,你应该看到日志上写着:
127.0.0.1 - - [18/Nov/2015 11:00:40] "GET /clock HTTP/1.1" 200 -
127.0.0.1 - - [18/Nov/2015 11:00:40] "GET /static/js/clock.js HTTP/1.1" 200 -
127.0.0.1 - - [18/Nov/2015 11:00:52] "GET /deep/clock HTTP/1.1" 200 -
127.0.0.1 - - [18/Nov/2015 11:00:52] "GET /deep/static/js/clock.js HTTP/1.1" 404
如您所见,LAST日志显示404
(未找到):它在/deep/static/js/
下找不到clock.js
。没错,我们根本没有那个文件夹。
所以,问题出在js路径上。解决方案是:
更改您的js路径从:
<script src="static/js/clock.js"></script>
至
<script src={{ url_for('static', filename="js/clock.js") }}></script>
现在,一切都应该好了:)在这个的帮助下,我们可以成功地找到我们的文件。
文档:静态文件