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 是静态文件夹中的一个文件夹,它起作用了。
我用 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
。
与
因此您可以添加查询字符串,包括静态文件的 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 是静态文件夹中的一个文件夹,它起作用了。