我对其中一项进行了更改.js
我使用的文件,无论我做什么,flask 都会坚持从内存缓存中获取文件的最新版本,而不进行任何更改。
为了澄清一下,我有以下结构。一切都始于foo.html
return render_template foo.html
foo.html
里面有一个表单,用一些数据调用flask,然后返回第二个模板bar.html
:
return render_template bar.html
第二个模板调用了一些.js
文件,放置在static
文件夹,但当代码更改时它不会更新。
我提到上面的结构是因为如果.js
文件被放置在foo.html
代替bar.html
然后烧瓶would获取文件上的新更改。但在bar.html
Flask 完全忽略它们。
怎么了?
唯一有效的方法是单击浏览器上的“禁用缓存”并再次重新加载。
最终,这是一个令人沮丧的浏览器缓存问题,可以通过强制浏览器执行“硬刷新”来解决,这将是依赖于浏览器/操作系统的击键,但通常这是有效的:
- Windows:Ctrl+F5
- 苹果电脑:Cmd+Shift+R
- Linux:Ctrl+Shift+R
还有其他文件名技巧可以用来避免这个问题(在OP的评论中提到)。这些在生产中尤其重要,因为您无法控制浏览器行为。
对于非静态 Flask 响应,您可以设置cache_control.max_age
属性,它应该告诉浏览器响应何时过期(如果已缓存)。例如,如果您有一个返回 JSON 数据的 Flask XHR 端点,您可以这样做:
@app.route('/_get_ajax_data/')
def get_ajax_data():
data = {"hello": "world"}
response = jsonify(data)
response.cache_control.max_age = 60 * 60 * 24 # 1 day (in seconds)
return response
您通常还可以在生产 Web 服务器配置中为特定资源类型(例如 CSS/JS/HTML/JSON/等)设置默认值
编辑 2019 年 4 月 1 日(与愚人节无关)
- Mac / Safari 按键现在似乎是:Cmd+Opt+R(通过评论,谢谢!)。
- 请参阅@MarredCheese 的新答案,了解一个非常优雅的“文件名技巧”,以强制浏览器忽略更新文件的缓存副本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)