menu E4b9a6's blog
rss_feed
E4b9a6's blog
有善始者实繁,能克终者盖寡。

Flask静态资源(JSCSS)添加版本号

作者:E4b9a6, 创建:2022-05-12, 字数:1425, 已阅:108, 最后更新:2022-05-12

这篇文章更新于 924 天前,文中部分信息可能失效,请自行甄别无效内容。

博客资源是采用ServiceWorker缓存的,这种做缓存的缺点是一旦JS文件或者CSS文件有所更新的话会导致部分功能无法正常使用

通过给文件附加版本号可以很好的解决这个问题

HTML
<script src="/static/js/a.js?v=1.0.0"></script>
<script src="/static/js/b.js?v=1.0.0"></script>

版本号可以采用数字,但采用数字作为版本号的话缺点是难以建立文件内容跟版本号的关联,我们更希望类似于下

HTML
<script src="/static/js/a.js?v=7c5d607"></script>
<script src="/static/js/b.js?v=cbb0e7a"></script>

为了建立资源文件与文件内容的关系,可以利用Flask中的Registering Filters功能来实现,首先对Flask模板渲染文件做以下更改

HTML
// 修改前
<script src="{{ url_for('static', filename='js/vue.min.js')}}"></script>
<script src="{{ url_for('static', filename='js/mdui.min.js')}}"></script>

//修改后
<script src="{{ url_for('static', filename='js/vue.min.js')|autoversion}}"></script>
<script src="{{ url_for('static', filename='js/mdui.min.js')|autoversion}}"></script>

“autoversion”方法可以在Flask中实现如下

Python
@app.template_filter('autoversion')
def autoversion_filter(filename):
  fullpath = os.path.join(app.root_path, filename[1:])
  try:
      timestamp = str(os.path.getmtime(fullpath))
  except OSError:
      return filename
  newfilename = "{0}?v={1}".format(filename, timestamp)
  return newfilename

资料参考


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]