Python 静态路径与多级路由

Python 静态路径与多级路由,python,flask,Python,Flask,因此,我对整个web和Flask编程有了新的认识。我在网页中很好地显示了数据库中的信息,然后我加入了一点java脚本。但是由于我在互联网上读到的东西,我有了这样组织我的URL的想法 本地主机:5000/数据/每日 本地主机:5000/数据/每周 本地主机:5000/数据/每月 然而,当flask调出页面时,当我使URL的深度超过一级时,我最终会得到java脚本错误,因为这些额外的级别已附加到脚本标记中的src属性路径中 这是怎么回事?我缺少的只是一些基本的网络编程知识吗?我在下面添加了一些代

因此,我对整个web和Flask编程有了新的认识。我在网页中很好地显示了数据库中的信息,然后我加入了一点java脚本。但是由于我在互联网上读到的东西,我有了这样组织我的URL的想法

  • 本地主机:5000/数据/每日
  • 本地主机:5000/数据/每周
  • 本地主机:5000/数据/每月
然而,当flask调出页面时,当我使URL的深度超过一级时,我最终会得到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;
}
函数开始时间(){
var today=新日期();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
m=检查时间(m);
s=检查时间(s);
document.getElementById('txt').innerHTML=
h+“:“+m+”:“+s;
var t=设置超时(开始时间,500);
}
功能检查时间(i){
如果(i<10){i=“0”+i};//在<10的数字前面加零
返回i;
}
因此,如果您复制所有内容并运行app.py

  • 本地主机:5000/deep/clock将失败

  • 本地主机:5000/时钟正常工作

这是怎么回事?我需要做什么才能让它们在当前配置下工作?

运行应用程序时,您应该看到日志上写着:

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>


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



文档:

好的,谢谢,这确实解决了问题,但是您是否有更多关于这里到底发生了什么的解释?我需要url_做什么。我看过Flask文档,不明白为什么首先需要url_?难道所有内容都不应该引用app.py的运行位置吗?只是添加了更多的解释和文档。使用
url\u for
可以帮助我们找到正确的静态文件。如果没有它,正如您所看到的,您的程序会因为错误的静态文件路径而失败。您不能直接指定js路径,相对引用将不起作用,不仅如此简单。@mechsin-url\u for是必需的,因为它从Flask配置中获取路径,避免了在HTML中调整引用的需要。静态文件位于静态文件夹中,就像模板存储在templates文件夹中一样,但这些文件可以更改。url_for只是一种帮助您查找资源的有用方法。
<script src={{ url_for('static', filename="js/clock.js") }}></script>