django-compressor 在每个请求中写入 collect_static/CACHE 中的新文件

django-compressor writing new files in collect_static/CACHE on every request

我使用 django-compressor + memcached 建立了一个 django 网站。 不确定它何时开始,但我每分钟都会在 .../collect_static/CACHE/css.../collect_static/CACHE/js 中找到新的 css 和 js 文件,例如 output.2fde5b60eff0.css.

我用django.contrib.staticfiles.storage.ManifestStaticFilesStorage.

我不知道这是正常现象,还是由于配置错误造成的。但是每隔几天,我就因为这个需要清理服务器

有什么建议吗?

更新: 这似乎是因为 css 和 js 代码中的模板变量,根据 this 的回答,但正如我所很多这样的变量,我仍然不知道如何解决这个问题。

好的,所以我找到了根本原因。 它实际上并不是压缩代码中 {{context_data_var}} 等模板变量的存在。

它是任何此类变量的存在,其值会根据每个请求发生变化。 我有两个这样的例子:

  1. 第三方存储服务(例如 Google 或 Amazon)的存储密钥
  2. csrf 令牌用于各种 ajax 请求

对于上面的1.,我只是把这样的代码移到了compress之外。

对于2.,解决方案略微复杂。我不得不放弃使用 {{csrf_token}}。 Django 详细解释here。我们需要使用 csrftoken cookie 而不是变量 {{csrf_token}},如果模板中至少有一个 {% csrf_token %},django 会设置这个 cookie。幸运的是,我的基本模板中有一个,所以 cookie 已经为我设置好了。我还为所有页面定义了 getCookie() 函数。

因此,我能够摆脱问题中解释的问题。