gpt4 book ai didi

python - Flask,使用 send_static_file 不断获取 404 服务静态文件

转载 作者:IT老高 更新时间:2023-10-28 22:14:22 29 4
gpt4 key购买 nike

我按照 How to serve static files in Flask 的指示进行操作,但仍然无法正常工作。

这是我的项目结构:

Project_path  
|
+--app
| |
| +--main.py
+--static
|
+--js
|
+--jquery-1.11.2.min.js

这里是 main.py :

@app.route('/js/<path:path>')
def serve_static(path):
root_dir = os.path.dirname(os.getcwd())
print(os.path.join(root_dir, 'static', 'js', path))
return app.send_static_file(os.path.join(root_dir, 'static', 'js', path))

这里是 index.html :

  ...
<script type="text/javascript" src="/js/jquery-1.11.2.min.js"></script>
...

当我访问 / 时,我可以在屏幕上看到正确的javascript文件路径
这是Project_path/static/js/jquery-1.11.2.min.js .

但是,我得到了

127.0.0.1 - - [22/Dec/2014 11:26:30] "GET /js/jquery-1.11.2.min.js HTTP/1.1" 404 -

感谢任何帮助。

编辑
在步入 send_static_file 之后方法,我找出发生了什么。基本上,我不应该用 abspath 作为论据,flask 在 send_static_file 中有判断:

if os.path.isabs(filename) or \
filename == '..' or \
filename.startswith('../'):
raise NotFound()

自从 filename我传入的是abspath,flask raise NotFound() .
似乎它应该传入的是到self.static_folder 的相对路径。 ( self 是 <Flask 'main'> ),在我的项目中,是 Project_name/app/static .但是,我没有设置static_folder我自己,这意味着 flask 认为静态文件夹应该在那里。

我还在想办法。

最佳答案

终于搞定了。使用 flask.send_from_directory

from flask import send_from_directory

@app.route('/js/<path:filename>')
def serve_static(filename):
root_dir = os.path.dirname(os.getcwd())
return send_from_directory(os.path.join(root_dir, 'static', 'js'), filename)

我现在很清楚,flask 真的很讨厌人们将 app.py 或在我的情况下是 main.py 放入子目录中。 仅当您的静态文件夹是 flask 认为的那样时才使用 send_static_file,即名称为 static 的文件夹与 app.py 在同一目录中。

关于python - Flask,使用 send_static_file 不断获取 404 服务静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596297/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com