Flask静态路径和多级路由

时间:2015-11-18 02:38:52

标签: python flask

所以我是整个网络和Flask编程的新手。我在网页中显示来自我的数据库的相当好的信息,然后我混合了一些java脚本。但是后来由于我在互联网上阅读的内容,我有了像这样组织我的URL的想法

  • 本地主机:5000 /数据/每日
  • 本地主机:5000 /数据/每周
  • 本地主机:5000 /数据/每月

然而,当我在烧瓶页面时,我的网址越来越深,我最终得到了java脚本错误,因为这些额外的级别已附加到我的脚本标记中的src属性路径。

那么这里发生了什么?我缺少一些基本的网络编程知识吗?我在下面添加了一些代码,显示了我遇到的例子。

以下文件位于以下文件夹配置

project_root
├── app.py
├── static
│   └── js
│       └── clock.js
└── templates
    ├── clock.html
    └── index.html

app.py

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 /深度/时钟将失败

  • localhost:5000 /时钟有效

那么这里发生了什么?我需要做些什么才能使它们在当前配置中工作?

1 个答案:

答案 0 :(得分:2)

运行应用程序时,您应该看到日志显示:

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

如您所见,最后日志显示404(未找到):它无法在clock.js下找到/deep/static/js/。这是真的,我们根本没有这个文件夹。

所以,问题是js路径。解决方案是:

从以下位置更改您的js路径:

<script src="static/js/clock.js"></script>

<script src={{ url_for('static', filename="js/clock.js") }}></script>

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

文档:Static Files