首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django静态文件版本控制

django静态文件版本控制
EN

Stack Overflow用户
提问于 2012-02-03 22:52:07
回答 10查看 21.2K关注 0票数 37

我正在研究一些通用的解决静态文件和更新问题的方法。

例如:假设有一个包含/static/styles.css文件的站点-并且站点被使用了很长一段时间-所以很多访问者在浏览器中缓存了这个文件

现在我们在这个css文件中做了更改,并在服务器上进行了更新,但一些用户仍然有旧版本(尽管服务器返回了修改日期)

显而易见解决方案是向文件/static/styles.css?v=1.1添加一些版本,但在这种情况下,开发人员必须跟踪该文件中的更改并手动增加版本

第二种解决方案是计算文件的md5散列,并将其添加到url /static/styels.css/?v={mdp5hashvalue}中,这看起来要好得多,但md5应该会以某种方式自动计算出来。

我认为这是可能的--创建一些模板标签,如下所示

代码语言:javascript
复制
{% static_file  "style.css" %}

,它将呈现

代码语言:javascript
复制
<link src="/static/style.css?v=md5hash">

但是,我不希望这个标签在每次页面加载时都计算md5,我也不想在django-cache中存储散列,因为那样我们将不得不在更新文件后清除...

有什么想法吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-02-16 00:21:23

Django1.4现在包含了CachedStaticFilesStorage,它可以做你需要的事情(好吧……差一点)。

因为Django2.2应该使用ManifestStaticFilesStorage而不是CachedStaticFilesStorage

您可以将其与manage.py collectstatic任务一起使用。像往常一样,所有静态文件都是从您的应用程序中收集的,但此存储管理器还会创建每个文件的副本,并将MD5散列附加到文件名中。例如,假设您有一个css/styles.css文件,它也将创建类似于css/styles.55e7cbb9ba48.css的内容。

当然,正如您所提到的,问题是您不希望视图和模板总是计算MD5散列来找到要生成的适当URL。解决方案是缓存。好的,你要求一个没有缓存的解决方案,我很抱歉,这就是为什么我说几乎。但是没有理由拒绝缓存,真的。CachedStaticFilesStorage使用名为staticfiles的特定缓存。默认情况下,它将使用您现有的缓存系统,瞧!但是,如果您不希望它使用常规缓存,可能是因为它是分布式memcache,并且您希望避免仅仅为了获取静态文件名而进行网络查询的开销,那么您可以为staticfiles设置一个特定的内存缓存。它比听起来更简单:查看this excellent blog post。下面是它的样子:

代码语言:javascript
复制
CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
    'LOCATION': '127.0.0.1:11211',
  },
  'staticfiles': {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    'LOCATION': 'staticfiles-filehashes'
  }
}
票数 38
EN

Stack Overflow用户

发布于 2012-02-03 23:52:51

我建议使用像django-compressor这样的东西。除了自动为你处理这种类型的东西,它还将自动合并和缩小你的文件,以加快页面加载。

即使您最终没有完全使用它,您也可以检查他们的代码,以获得设置类似内容的指导。它比你从一个简单的StackOverflow答案中得到的任何东西都要好。

票数 16
EN

Stack Overflow用户

发布于 2012-03-17 02:02:12

我使用自己的模板标签将文件修改日期添加到url:https://bitbucket.org/ad3w/django-sstatic

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9130555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档