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

问题描述

我有一个使用 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. 用于各种 ajax 请求的 csrf 令牌

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...