我按照如何在Flask中提供静态文件的说明,但仍然无法使其工作.
这是我的项目结构:
Project_path
|
+--app
| |
| +--main.py
+--static
|
+--js
|
+--jquery-1.11.2.min.js
Run Code Online (Sandbox Code Playgroud)
这是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))
Run Code Online (Sandbox Code Playgroud)
这是index.html:
...
<script type="text/javascript" src="/js/jquery-1.11.2.min.js"></script>
...
Run Code Online (Sandbox Code Playgroud)
而当我访问/,我可以看到在屏幕上打印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 -
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
编辑
在逐步完成该send_static_file方法之后,我会发现发生了什么.基本上,我不应该使用abspath作为参数,烧瓶有一个判断send_static_file:
if os.path.isabs(filename) or \
filename == '..' or \
filename.startswith('../'):
raise NotFound()
Run Code Online (Sandbox Code Playgroud)
因为filename我进入是一个abspath,烧瓶加注NotFound().
似乎它应该传递的是self.static_folder(self is <Flask 'main'>)的相对路径,在我的项目中,它是Project_name/app/static.但是,我没有设置static_folder自己,这意味着烧瓶认为静态文件夹应该在那里.
我还在试图弄清楚要做什么.
lai*_*e9m 45
终于搞定了.使用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)
Run Code Online (Sandbox Code Playgroud)
我现在很清楚,烧瓶真的很讨厌人们把app.py我或者我的情况main.py放到一个子目录中.仅当您的静态文件夹是flask认为的文件夹时才使用send_static_file,即名称static与app.py在同一目录中的文件夹.
Bur*_*lid 11
您需要做的就是将static_folder参数传递给启动器:
static_url_path- 可用于为Web上的静态文件指定不同的路径.默认为static_folder文件夹的名称.
static_folder- 包含静态文件的文件夹,应该在static_url_path中提供.默认为应用程序根路径中的"static"文件夹.
app = Flask(__name__, static_folder=os.path.abspath('/foo/bar/zoo/'))
Run Code Online (Sandbox Code Playgroud)
现在,烧瓶会寻找一个新的目录static中/foo/bar/zoo从那里为静态文件.仅send_from_directory在提供可能与静态文件不在同一位置的媒体文件时才使用.
| 归档时间: |
|
| 查看次数: |
37540 次 |
| 最近记录: |