flask css 文件的加载的问题

2018-02-01 13:07:17 +08:00
 woshichuanqilz

这样我用 flask 运行了一个简单的网页, 但是我有时候如果修改了 css 文件, reload 这个界面, 网页没有出现变化, 但是如果我进入到这个 css 的文件路径下面, 比如: http://192.168.0.72:5000/static/css/customlayout.css 我看到这个文件确实没有变化, 但是如果 reload 这个 css 文件, 变化有了, 然后在 reload 之前的网页, 也变化正常了。

但是这个问题不是总会出现, 只是有的时候出现, 不知道各位大神有没有遇到过这个问题, 然后这个问题如何解决?

4058 次点击
所在节点    Flask
12 条回复
scriptB0y
2018-02-01 13:34:49 +08:00
应该是浏览器对静态文件缓存

开发者工具 > Network > Disable cache 试试。开发者工具保持打开
HypoChen
2018-02-01 13:36:58 +08:00
楼上正解,一般是浏览器缓存,也可以开隐身模式
ipwx
2018-02-01 13:48:21 +08:00
如果是 Chrome:在打开开发者工具面板的前提下,右键 Chrome 刷新按钮,“硬性重新加载”或者更进一步“清空缓存并硬性重新加载”。

另一个解决方案:在 Flask 里面对资源的引用加上时间戳,比如 ".../xxx.css?" + time.time()。做的考究一点你可以把这个 "?" + time.time() 时间戳用 render_template 环境传进去,根据 app.config['DEBUG'] 决定是不是传空字符串。
ipwx
2018-02-01 13:50:11 +08:00
第三个解决方案:产生 css 的内容哈希码,并在 Flask 里面读取这个哈希码,使得资源的引用变成 ".../xxx.css?h=" + hashcode。这个方案比时间戳方案的好处在于,deployment 版本也能用。
ipwx
2018-02-01 13:50:59 +08:00
第四个解决方案,是第三个解决方案的变种,直接产生 xxx.[hashcode].css 文件,Flask 也引用这个文件。好处是所有上面的好处都有了,而且对 intermediate 缓存服务器友好。
fangzq
2018-02-01 13:55:02 +08:00
在开发测试时,可以对 flask 做以下配置:

```
TEMPLATES_AUTO_RELOAD = True
SEND_FILE_MAX_AGE_DEFAULT = 0
```
这样每当你的 模板文件或静态文件改变时,就能即时在浏览器里看到更改后的效果
cowpea
2018-02-01 14:08:08 +08:00
....css?time=......
Cache-Control:no-cache
renmu123
2018-02-01 14:49:00 +08:00
Chrome 可以 Ctrl+F5 强制刷新浏览器缓存
atcdef
2018-02-01 17:24:55 +08:00
chrome 的问题,在非开发人员模式下,你就是刷新网页,一些静态文件也不会重新加载,所以我都用 firefox。firefox 对 pdf 在线预览也会缓存,但可以在响应头里写入禁止响应标识就行。
woshichuanqilz
2018-02-01 17:25:56 +08:00
scriptB0y
2018-02-01 17:34:59 +08:00
@ipwx 一直很困惑为什么有时候刷新有这三个选项,有时候没有,原来是开发者工具开不开的关系……
Anakin078
2018-02-01 19:18:45 +08:00
强制刷新~ Ctrl+F5

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/427679

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX