Flask:Favicon 不会在静态文件夹中刷新

Flask: Favicon does not refresh in static folder

我用 Jinja2 在静态文件夹中为我的 Flask webapp 保存了一个测试图标 favicon.ico。然后我在HTML文件中添加:

<link rel="shortcut icon" href="{{ url_for('static', filename='favico.ico') }}">

然后我从静态文件夹中删除了 favicon.ico 文件并添加了一个新的网站图标并将其命名为相同的东西 favicon.ico。然后它会自动更新到我刚刚删除的以前的图标图像。当我将文件名更改为其他名称时,它会呈现正确的图标,例如 favico.ico.

此文件夹是否按名称缓存以前的图标文件?如果是这样我该如何清除它?我是 运行 Windows 10 家。

这可能与您使用的浏览器有关,因为某些浏览器会缓存静态文件以实现快速网络加载。大多数情况下它发生在 chrome。尝试在 Firefox 上测试您的网站。

这可能是由于两个原因,要么是您的烧瓶,要么是您的浏览器将其保存在缓存中。

将此添加到您的 application.py

app.config["CACHE_TYPE"] = "null"  
cache.init_app(app)

尝试清理浏览器缓存和 cookie。

如果仍然不起作用,请尝试检查您是否使用了正确的名称,因为您说的是 favicon.ico 但在 link 中写 favico.ico

一样,大多数现代浏览器都希望缓存静态文件以供 fask web 加载。

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

我的解决方案是重写 app.context_processor 中的 flask.url_for,这将为静态文件添加时间戳。

例如:/static/index.js ==> /static/index.js?ts=${MODIFIED_TIME}

这是我的代码:

```python

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而不是时间戳,您可以根据自己的喜好自定义。

:)

当我尝试将此方法用于网站图标显示时, <link rel="shortcut icon" href="{{ url_for('static', filename='favico.ico') }}"> 没有用,我尝试了其他一些方法,比如清除缓存,问题仍然存在。所以我尝试使用常规方法 <link href="../static/favicon_io/favicon.ico" rel="icon"> 并且它有效。

后来我尝试这样使用它<link rel="shortcut icon" href="{{ url_for('static', filename='favicon_io/favico.ico') }}"> 其中 favicon_io 是静态文件夹中的一个文件夹,它起作用了。