这样我用 flask 运行了一个简单的网页, 但是我有时候如果修改了 css 文件, reload 这个界面, 网页没有出现变化, 但是如果我进入到这个 css 的文件路径下面, 比如: http://192.168.0.72:5000/static/css/customlayout.css 我看到这个文件确实没有变化, 但是如果 reload 这个 css 文件, 变化有了, 然后在 reload 之前的网页, 也变化正常了。
但是这个问题不是总会出现, 只是有的时候出现, 不知道各位大神有没有遇到过这个问题, 然后这个问题如何解决?
1
scriptB0y 2018-02-01 13:34:49 +08:00
应该是浏览器对静态文件缓存
开发者工具 > Network > Disable cache 试试。开发者工具保持打开 |
2
HypoChen 2018-02-01 13:36:58 +08:00
楼上正解,一般是浏览器缓存,也可以开隐身模式
|
3
ipwx 2018-02-01 13:48:21 +08:00
如果是 Chrome:在打开开发者工具面板的前提下,右键 Chrome 刷新按钮,“硬性重新加载”或者更进一步“清空缓存并硬性重新加载”。
另一个解决方案:在 Flask 里面对资源的引用加上时间戳,比如 ".../xxx.css?" + time.time()。做的考究一点你可以把这个 "?" + time.time() 时间戳用 render_template 环境传进去,根据 app.config['DEBUG'] 决定是不是传空字符串。 |
4
ipwx 2018-02-01 13:50:11 +08:00
第三个解决方案:产生 css 的内容哈希码,并在 Flask 里面读取这个哈希码,使得资源的引用变成 ".../xxx.css?h=" + hashcode。这个方案比时间戳方案的好处在于,deployment 版本也能用。
|
5
ipwx 2018-02-01 13:50:59 +08:00
第四个解决方案,是第三个解决方案的变种,直接产生 xxx.[hashcode].css 文件,Flask 也引用这个文件。好处是所有上面的好处都有了,而且对 intermediate 缓存服务器友好。
|
6
fangzq 2018-02-01 13:55:02 +08:00
在开发测试时,可以对 flask 做以下配置:
``` TEMPLATES_AUTO_RELOAD = True SEND_FILE_MAX_AGE_DEFAULT = 0 ``` 这样每当你的 模板文件或静态文件改变时,就能即时在浏览器里看到更改后的效果 |
7
cowpea 2018-02-01 14:08:08 +08:00
....css?time=......
Cache-Control:no-cache |
8
renmu123 2018-02-01 14:49:00 +08:00
Chrome 可以 Ctrl+F5 强制刷新浏览器缓存
|
9
atcdef 2018-02-01 17:24:55 +08:00
chrome 的问题,在非开发人员模式下,你就是刷新网页,一些静态文件也不会重新加载,所以我都用 firefox。firefox 对 pdf 在线预览也会缓存,但可以在响应头里写入禁止响应标识就行。
|
10
woshichuanqilz OP |
12
Anakin078 2018-02-01 19:18:45 +08:00
强制刷新~ Ctrl+F5
|