Flask将css文件呈现为空

时间:2014-09-01 18:26:12

标签: python css flask

我一直在研究一个简单的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.cssapp_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

enter image description here

Bootstraps内容:

enter image description here

style.css内容

enter image description here

将style.css重命名为 main.css

enter image description here

递归目录结构:

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

2 个答案:

答案 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不同,看起来就像你的场景)。或者您可以使用此结构进行编码。

这样,您可以专注于编码,而不是解决安装问题。