【问题标题】:Flask: Favicon does not refresh in static folderFlask:Favicon 不会在静态文件夹中刷新
【发布时间】:2019-04-27 03:12:00
【问题描述】:

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

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

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

此文件夹是否按名称缓存以前的网站图标文件?如果是我如何清除它?我正在运行 Windows 10 家庭版。

【问题讨论】:

  • 可能不是烧瓶,而是您的浏览器将其保存在缓存之类的东西中。
  • 尝试清理浏览器的缓存和cookies。

标签: python flask jinja2 refresh favicon


【解决方案1】:

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

我后来尝试以这种方式使用它&lt;link rel="shortcut icon" href="{{ url_for('static', filename='favicon_io/favico.ico') }}"&gt; 其中 favicon_io 是静态文件夹中的一个文件夹,并且可以正常工作。

【讨论】:

    【解决方案2】:

    作为@Ankur's answered,大多数现代浏览器都希望缓存静态文件以进行快速网页加载。

    所以你可以添加查询字符串包括静态文件的 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 代替时间戳,随意自定义。

    :)

    【讨论】:

      【解决方案3】:

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

      将此添加到您的application.py

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

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

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

      【讨论】:

      • 我清除了浏览器的缓存和 cookie,它仍然可以。我也尝试添加该代码,但我不断收到未定义缓存的 NameError
      • 我尝试清除浏览器以及计算机上的 Internet 属性中的缓存 - 但我不确定这些临时文件是否默认为 Edge/Explorer 或所有浏览器。
      • 我想我看到了你的全部答案 - 当我添加代码 sn-p 时,它会识别 app.config["CACHE_TYPE"] = "null",但我得到一个 NameError 是“cache” '没有定义。至于名称的拼写错误 - 当我将名称切换为 favicon.ico 以外的任何名称时(无论是 favico.ico 还是 hello.ico),图像都会更新。但是,当我将 favico.ico 切换回 favicon.co 时,我的 Windows 资源管理器中的图像会从我想要的图像更改回旧的测试图像。这些信息缓存在哪里?
      • 我不确定发生了什么......或者缓存在删除后是否需要一段时间才能刷新,但文件现在停止切换其图像。 “favicon.ico”呈现为正确的图像。
      【解决方案4】:

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

      【讨论】:

      • 我只在firefox上本地运行过,我删除了firefox的缓存,但是当我将文件切换回favicon.ico时,图像仍然发生变化
      猜你喜欢
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 2018-06-25
      • 2015-11-17
      • 2014-06-06
      相关资源
      最近更新 更多