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

时间:2018-11-25 04:56:20

标签: python flask jinja2 refresh 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。

此文件夹是否按名称缓存先前的收藏夹文件?如果是这样,我该如何清除?我正在运行Windows 10 Home。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

可能是由于烧瓶或浏览器将其保存在缓存中的两个原因所致。

将此添加到您的application.py

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

OR

尝试清除浏览器缓存和Cookie。

如果仍然无法正常运行,请尝试检查您是否使用了正确的名称(您在说favicon.ico,但在链接中写了favico.ico

答案 2 :(得分:0)

@Ankur's answered一样,大多数现代浏览器都希望缓存静态文件以进行网络加载。

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

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

例如:/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代替时间戳,只需根据需要进行自定义即可。

:)