Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python强制重新加载缓存的JS文件_Python_Caching_Heroku_Flask - Fatal编程技术网

Python强制重新加载缓存的JS文件

Python强制重新加载缓存的JS文件,python,caching,heroku,flask,Python,Caching,Heroku,Flask,我使用以下代码在heroku上托管的flask应用程序上缓存静态文件: # cache control @app.after_request def add_header(response): # rule so it will only affect static files rule = request.path if "static" in rule: response.cache_control.max_age = 1000000

我使用以下代码在heroku上托管的flask应用程序上缓存静态文件:

# cache control
@app.after_request
def add_header(response):
    # rule so it will only affect static files
    rule = request.path
    if "static" in rule:
        response.cache_control.max_age = 1000000
        return response
    else:
        return response
它很好用

但是现在我做了一些更改,我需要网站加载新文件。 如果我在常规浏览器中打开已经打开的站点,它会加载旧文件(因为它们是缓存的)


在匿名模式下或按ctrl+f5=加载新文件。问题是普通用户不会按ctrl+f5键或使用匿名模式。

正如@mpf82所建议的,您可以简单地向要重新加载的文件添加一个版本或某个查询字符串参数

如果文件名更改,浏览器将不再缓存旧文件

在flask中,对于的
url\u中未知的变量作为查询字符串处理,因此您只需选择一个未知的变量,即f.e.
version
,并在其中添加一个版本号,f.e.
12052017

<script type=text/javascript src="{{ url_for('static', filename='js/main.js', version='12052017') }}"></script>

就这样,结果是:


正如@mpf82建议的那样,您只需向要重新加载的文件添加一个版本或某个查询字符串参数即可

如果文件名更改,浏览器将不再缓存旧文件

在flask中,对于
url\u中未知的变量作为查询字符串处理,因此您只需选择一个未知的变量,即f.e.
version
,并在其中添加一个版本号,f.e.
12052017

<script type=text/javascript src="{{ url_for('static', filename='js/main.js', version='12052017') }}"></script>

就这样,结果是:


常见的方法是向正在加载的资源添加伪参数(例如时间戳或版本)。相关SO问题:这也是SO用来确保加载最新JS/CSS文件的方法(只需查看此页面的源代码即可)。谢谢您的提示!常用的方法是向正在加载的资源添加伪参数(例如,时间戳或版本)。相关SO问题:这也是SO用来确保加载最新JS/CSS文件的方法(只需查看此页面的源代码即可)。谢谢您的提示!这太棒了,太简单了!如果您希望它至少每天刷新一次,您还可以传递一个值为datetime.date.today()的变量,但这可能不是非常高效。这太棒了,太简单了!如果希望至少每天刷新一次,也可以传递一个值为datetime.date.today()的变量,但这可能不是非常有效的。