python - Flask 服务自包含的静态项目
问题描述
我有几个已经完成的、独立的静态项目,我想与 Flask 一起使用。我的项目目录如下所示:
- flask
- flaskr.py
- projects
- project1
- index.html
- css.css
- js.js
- project2
- ...
- ...
我试图只是send_static_file
我的index.html
:
@app.route('/proj1')
def proj1():
return app.send_static_file("projects/index.html")
但是,它对 and 的引用指向css.css
and而不是and 。js.js
/css.css
/js.js
/projects/project1/css.css
/projects/project1/js.js
我也尝试app.root_path
在调用之前进行修改send_static_file
,然后在之后重置它,但这总是会导致 404。
在似乎工作之后立即插入<base href="/projects/project1/">
标签,但对我来说感觉很糟糕。<head>
我想找到一个更“正确”的解决方案。
我怎样才能做到这一点?我不想修改项目中的任何代码;它应该尽可能可拖放。
解决方案
据我所知send_static_file
只发送一个静态文件,它不会重写或任何东西。所以文件到达客户端,就像它在文件系统上一样。
浏览器/proj1
获取并获取一个 HTML 文件,上面写着“同时下载css.css
并将其添加到此文档中”。浏览器不知道 HTML 文件最初位于/projects/project1/index.html
,它只知道它被访问过/proj1
。所以它会查找与css.css
它访问的文件相关的文件,所以它会查找/css.css
.
如果您提供index.html
via /projects/project1/index.html
(或驻留在 中的任何其他路径/projects/project1/
),则相对查找将导致/projects/project1/css.css
.