问题描述
我有一个使用 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}}
这样的模板变量的存在。
存在任何此类变量,其值随每个请求而变化。 我有两个这样的例子:
- 第三方存储服务(例如 Google 或 Amazon)的存储密钥
- 用于各种 ajax 请求的 csrf 令牌
对于上面的 1.,我只是将这些代码移到了 compress 之外。
对于2.,解决方案稍微涉及。我不得不放弃使用 {{csrf_token}}
。 Django 详细解释了here。我们需要使用 csrftoken
cookie 而不是变量 {{csrf_token}}
,如果模板中至少有一个 {% csrf_token %}
,django 会设置这个 cookie。幸运的是,我的基本模板中有一个,所以 cookie 已经为我准备好了。我还为所有页面定义了 getCookie()
函数。
因此,我能够摆脱我的问题中解释的问题。