首页 > 解决方案 > 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 家庭版。

标签: pythonflaskjinja2refreshfavicon

解决方案


正如 @Ankur 所回答的那样,大多数现代浏览器都希望缓存静态文件以进行快速网页加载。

因此,您可以添加查询字符串包括静态文件的 FileInfo。

我的解决方案是重写flask.url_forin 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 代替时间戳,只需根据需要进行自定义。

:)


推荐阅读