烧瓶静态路径和多级路由



所以我对整个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>

现在,一切都应该好了:)在这个的帮助下,我们可以成功地找到我们的文件。


文档:静态文件

最新更新