Flask 发送静态但有时更改的文件

Flask 发送静态但有时更改的文件,flask,Flask,我想用flask提供一些主要是静态的,但有时会更改的文件。现在它们位于静态目录中,可以在/static/filename上访问,有时flask应用程序会在静态目录中生成并写入文件的新版本,但问题是,除非我在浏览器中按“刷新”按钮,否则它们不会在浏览器中自动更新。您可以为静态资源创建版本查询字符串 以下是一个很好的例子: 然后在jinja模板中使用static_urljs/a.js而不是url_forstatic,filename=js/a.js def register_jinja(app):

我想用flask提供一些主要是静态的,但有时会更改的文件。现在它们位于静态目录中,可以在/static/filename上访问,有时flask应用程序会在静态目录中生成并写入文件的新版本,但问题是,除非我在浏览器中按“刷新”按钮,否则它们不会在浏览器中自动更新。

您可以为静态资源创建版本查询字符串

以下是一个很好的例子:

然后在jinja模板中使用static_urljs/a.js而不是url_forstatic,filename=js/a.js

def register_jinja(app):
    ...

    if not hasattr(app, '_static_hash'):
        app._static_hash = {}

    def static_url(filename):
        if app.testing:
            return filename

        if filename in app._static_hash:
            return app._static_hash[filename]

        with open(os.path.join(app.static_folder, filename), 'r') as f:
            content = f.read()
            hsh = hashlib.md5(content).hexdigest()

        app.logger.info('Generate %s md5sum: %s' % (filename, hsh))
        prefix = app.config.get('SITE_STATIC_PREFIX', '/static/')
        value = '%s%s?v=%s' % (prefix, filename, hsh[:5])
        app._static_hash[filename] = value
        return value

    @app.context_processor
    def register_context():
        return dict(
            static_url=static_url,
            ...
        )