我一直在研究一个简单的Flask应用程序,并且在某些时候决定在Bootstrap旁边添加自定义CSS样式。但是,由于某种原因,此CSS文件呈现为空文件。无论我使用http://localhost:5000/static/style.css
打开它还是使用Firebug进行检查,结果都是一样的。 bootstrap.min.css已加载但style.css为空,尽管它实际上不是空的。
模板:
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/lib/bootstrap.min.css') }}" >
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/style.css') }}" >
CSS文件夹路径为app_root/static/css/style.css
和app_root/static/css/lib/bootstrap.min.css
但正如我已经提到的,文件已加载。
有没有人有类似的问题?
修改
起初我认为这是一个CSS问题所以我做了很多编辑。这就是style.css目前的样子:
.navbar {
background-color: #aaa;
}
p {
font: Arial;
}
body {
height: 100%;
}
“文件为空”的意思是,一旦加载,它就会被加载为空。 我仍然不知道为什么会这样,但在玩了一段时间后,我注意到它与文件名有关。例如,如果我将 style.css 重命名为 main.css 并将其加载到html中,一切正常。
如您所见,两个文件都已加载。 style.css和bootstrap.min.css
Bootstraps内容:
style.css内容
将style.css重命名为 main.css
递归目录结构:
project/static/css:
lib/ style.css
project/static/css/lib:
bootstrap-theme.css bootstrap-theme.min.css bootstrap.css bootstrap.min.css
编辑2:
此外,我设法在一个单独的测试项目(在不同的virtualenv中)中使用简单的 app.py 模块,静态和<重新创建了这个相同的问题em>模板文件夹。
编辑3: 测试应用代码:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run()
文件夹结构是相同的:
test/
./test:
app.py
static/
templates/
./test/static:
css/
./test/static/css:
lib/
main.css
./test/static/css/lib:
bootstrap.min.css
./test/templates:
index.html
该应用程序以:
开头python app.py
答案 0 :(得分:4)
更新:Flask服务空CSS我错了。烧瓶不是问题,浏览器是。浏览器已经打开了很长时间,最初它将css文件缓存为空(因为最初文件为空)。
对于这个问题,最简单的解决方案似乎是在任何开发人员工具(在我的案例中为Firebug)中关闭浏览器缓存。其他解决方案是将HTTP标头添加到所有视图中,如下所示:
@auth.after_app_request
def after_request(response):
response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '0'
return response
虽然后者似乎是一个坏主意。
P.S。请原谅我的无聊。
答案 1 :(得分:1)
这可能无法直接回答您的问题,但也许可以解决您的问题。 使用Bootstrap应该很简单,如果你知道如何做到这一点,否则,它可能会很混乱。
在处理完这个之后,我找到了一个名为flask-bootstrap的包,它解决了部分问题。然后我写信给自己(并公开)https://pypi.python.org/pypi/machete/,这是一个从模板生成python代码的工具。
在您的情况下,您可以尝试输入一个空目录,然后键入:
$ machete -t bootstrap
还有其他工具,比如cookiecutter,但我还没有尝试过它们。
这将创建所有必要的文件,使您的代码可以在Pypi上部署(如果您愿意),并将创建具有可运行情况的所有文件,只需键入:
$ python run.py
然后检查代码。你可以选择这样做只是为了理解flask-bootstrap是如何工作的(这与在裸手下载bootstrap不同,看起来就像你的场景)。或者您可以使用此结构进行编码。
这样,您可以专注于编码,而不是解决安装问题。