Python Flask,继续使用send_static_file获取404服务静态文件
我按照他的指示去做,但还是没能让它工作Python Flask,继续使用send_static_file获取404服务静态文件,python,flask,Python,Flask,我按照他的指示去做,但还是没能让它工作 @app.route('/static/<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) 以下是我的项目结构: Project_path
@app.route('/static/<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)
以下是我的项目结构:
Project_path
|
+--app
| |
| +--main.py
+--static
|
+--js
|
+--jquery-1.11.2.min.js
@app.route('/static/<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)
下面是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))
@app.route('/static/<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)
当我访问/
时,我可以看到屏幕上打印的javascript文件的正确路径这是
Project\u path/static/js/jquery-1.11.2.min.js
@app.route('/static/<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)
但是,我还是
127.0.0.1 - - [22/Dec/2014 11:26:30] "GET /js/jquery-1.11.2.min.js HTTP/1.1" 404 -
@app.route('/static/<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)
感谢您的帮助
@app.route('/static/<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)
编辑在逐步执行
send\u static\u file
方法之后,我发现了发生了什么。基本上,我不应该使用abspath作为参数,flask在send\u static\u file
中有一个判断:
if os.path.isabs(filename) or \
filename == '..' or \
filename.startswith('../'):
raise NotFound()
@app.route('/static/<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)
由于传入的filename
是一个abspath,因此NotFound()
似乎应该传入的是到
self.static\u文件夹的相对路径(self是
),在我的项目中,它是project\u name/app/static
。但是,我自己没有设置static\u folder
,这意味着flask认为静态文件夹应该在那里
@app.route('/static/<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)
我还在想办法。你忘了在最后一个os.path中添加'static'
。在return
子句中加入。终于让它工作了。使用
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)
@app.route('/static/<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导入从\u目录发送\u
@app.route(“/js/”)
def SERVER_静态(文件名):
root\u dir=os.path.dirname(os.getcwd())
从_目录返回send_(os.path.join(root_dir,'static','js'),文件名)
现在我很清楚,flask真的很讨厌人们把app.py
或者在我的例子中把main.py
放到子目录中仅当您的静态文件夹是flask认为的文件夹,即与app.py位于同一目录中的名为static
的文件夹时,才使用send\u static\u file
,您只需将文件传递给启动器:
@app.route('/static/<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)
静态url\u路径
–可用于为
web上的静态文件。默认为static\u文件夹的名称
文件夹
@app.route('/static/<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)
static\u文件夹
–包含静态文件的文件夹,应在
静态url路径。默认为的根路径中的“静态”文件夹
应用程序
@app.route('/static/<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将在/foo/bar/zoo
中查找一个名为static
的目录,从中提供静态文件。只有当您提供的媒体文件可能与静态文件不在同一位置时,才可以使用send\u from\u directory
。对我来说,这一点很有效:
@app.route('/static/<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)
在\uuuu init\uuuuu.py
中,您刚才添加的页面出现404错误的一个可能原因是您的脚本(.py文件)的早期版本仍在运行:确保关闭并结束(终止)进程 我原以为你是对的,但在添加了静态
之后,它仍然给我404错误。你为什么要经历这些?Flask将自动提供静态文件。您不需要为它编写视图。@BurhanKhalid不太正确。如果为1,flask将自动提供静态文件。set src=“/static/js/xxx.js”;2.静态文件夹与app.py
直接位于同一个文件夹中。对我来说,这个文件夹起作用了:@app.route('/static/')def serve_static(文件名):root_dir=os.path.dirname(os.getcwd())return send_from_目录(os.path.join(root_dir,'static',js'),文件名)我的项目的正确路径是什么?html中的src
属性应该是什么?它是指向static
父目录的完全限定路径,您不需要对src属性进行任何更改,它将与中的完全相同。因此它是static\u url\u path=Project\u path/static/
和src=“/js/jquery-1.11.2.min.js”
,对吗?不,删除静态
部分,请阅读文档,文档中的解释比我在这些评论中的解释要好得多。经过多次测试,我确信如果我想将静态文件放在单独的文件夹(css、js等)中,仅通过修改静态url路径
和静态文件夹
是不可能的。在jinja2中为
使用url\u会起作用,但那是另一回事。我在HTML代码中也以这种方式调用静态文件:您可以将root\u dir替换为“.”-return send\u from\u directory(os.path.join(“.”、'static、'js')、filename)
这个答案不完全正确。对于蓝图,您可以设置另一个静态文件夹,该静态文件夹可以是任何名称。
@app.route('/static/<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)