python - Flask:Favicon 不会在静态文件夹中刷新
问题描述
我在静态文件夹中为我的 Flask webapp 保存了一个带有 Jinja2 的测试图标作为 favicon.ico。然后我添加到 HTML 文件中:
<link rel="shortcut icon" href="{{ url_for('static', filename='favico.ico') }}">
然后我从静态文件夹中删除了 favicon.ico 文件,并添加了一个新的 favicon 并将其命名为 favicon.ico。然后它会自动更新到我刚刚删除的上一个网站图标图像。当我将文件名更改为其他名称时,它会呈现正确的图标,例如 favico.ico。
这个文件夹是否按名称缓存了以前的 favicon 文件?如果是我如何清除它?我正在运行 Windows 10 家庭版。
解决方案
正如 @Ankur 所回答的那样,大多数现代浏览器都希望缓存静态文件以进行快速网页加载。
因此,您可以添加查询字符串包括静态文件的 FileInfo。
我的解决方案是重写flask.url_for
in app.context_processor
,这将为静态文件添加时间戳。
例如:/static/index.js
==>/static/index.js?ts=${MODIFIED_TIME}
这是我的代码:
```蟒蛇
import os
from flask import Flask
app = Flask(__name__)
@app.context_processor
def override_url_for():
return dict(url_for=dated_url_for)
def dated_url_for(endpoint, **values):
if endpoint == 'static':
filename = values.get('filename', None)
if filename is not None:
path = os.path.join(app.root_path, endpoint, filename)
values['ts'] = int(os.stat(path).st_mtime)
return url_for(endpoint, **values)
```
此外,您可以使用文件的 md5sum 代替时间戳,只需根据需要进行自定义。
:)
推荐阅读
- ffmpeg - 如何计算 linesize 的填充?
- c++ - 如何将 System::Int64^ 转换为 std::int64_t (c++)?
- javascript - 无需移除内部零件即可更换琴弦
- node.js - 如何直接在云端上传图片而不将其存储到本地目录中?
- javascript - 制作 DOM 元素的副本,然后添加动画
- python - Numpy:计算数组中索引出现的最佳方法
- java - 如何使用 Dto 类中的实体类进行映射并使用存储库来执行此操作,但我没有得到它
- docker - 适用于 Windows 容器的 Amazon Corretto 11 docker 映像
- reactjs - SVG在页面更改时变黑
- javascript - Dropzonejs度假村附加图像