发送静态但有时更改文件

时间:2015-04-06 21:16:39

标签: flask

我想提供一些大多数静态但有时会更改带有烧瓶的文件。现在它们位于static目录中,可以在/static/filename上访问,有时会生成一个新版本的文件,并由烧瓶应用程序在静态目录中编写,但问题是它们不是&除非我在浏览器中按下刷新按钮,否则将在浏览器中自动更新。

1 个答案:

答案 0 :(得分:0)

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

来自June的一个很好的例子:

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,
            ...
        )

然后在您的jinja模板中使用static_url("js/a.js")代替url_for("static", filename="js/a.js")