我有几个已经完成,自我包含的静态项目,我想与烧瓶服务。我的项目目录类似于:
- 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")
然而,它对css.css
和js.js
的引用然后指向/css.css
和/js.js
,而不是/projects/project1/css.css
和/projects/project1/js.js
。你知道吗
我还尝试在调用send_static_file
之前修改app.root_path
,然后重置它,但这总是导致404。你知道吗
在<head>
后面插入一个<base href="/projects/project1/">
标记似乎很管用,但我觉得很不舒服。我想找到一个更“正确”的解决办法。你知道吗
我怎样才能做到这一点?我不想修改项目中的任何代码;它应该尽可能地拖放。你知道吗
据我所知
send_static_file
只发送一个静态文件,它不进行重写或任何操作。因此,文件到达客户端时与文件系统上的文件一样。你知道吗浏览器得到
/proj1
并得到一个HTML文件,上面写着“还可以下载css.css
并将其添加到此文档”。浏览器不知道HTML文件最初驻留在/projects/project1/index.html
,它只知道它被访问了/proj1
。因此它查找相对于它访问的文件的css.css
文件,因此它查找/css.css
。你知道吗如果通过
/projects/project1/index.html
(或/projects/project1/
中的任何其他路径)为index.html
提供服务,则相对查找将导致/projects/project1/css.css
。你知道吗正如@jpmc26所说,这个问题一开始就错了。烧瓶应该用于动态站点,并且是过度杀戮的,不适合这个用例。相反,建议使用像Nginx这样的web服务器。如果需要动态内容,Nginx将能够将请求路由到子服务器。你知道吗
在my other answer中,我概述了发生此问题的原因,并提出了一个解决方案,以便浏览器可以推断资源的正确位置。另一种可能性是让flask找出浏览器真正想要的东西。”通常情况下,“浏览器发送带有请求的referer header(尽管有例外),我们可以用它来推断
css.css
的含义:这是相当黑客和个人我不建议它,基本上你要么硬编码的项目或实现一些注册自动化。你知道吗
相关问题 更多 >
编程相关推荐