我一直在做一些研究,我找到了解释如何使用Django(1.8)缓存清除的文章,但是他们没有解释我的情况。
我在settings.py中使用了S3(并且它可以正常工作):
STATICFILES_STORAGE= 'pms.s3utils.StaticRootS3BotoStorage'
为了使用缓存清除docs说我必须设置:STATICFILES_STORAGE='django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
我不知道使用什么设置来同时使用S3和缓存清除。
谢谢!
答案 0 :(得分:12)
所以我终于找到了解决方法。
为了能够将我的文件上传到我的S3存储桶中的2个不同的文件夹(静态和上传),我在settings.py
文件中有这个:
STATICFILES_STORAGE = 'myapp.s3utils.StaticRootS3BotoStorage'
DEFAULT_FILE_STORAGE = 'myapp.s3utils.MediaRootS3BotoStorage'
这在myapp.s3utils.py
文件中:
from storages.backends.s3boto import S3BotoStorage
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads')
但是我无法使用Django的缓存破坏。
解决方案是将我的myapp.s3utils.py
文件更改为:
from storages.backends.s3boto import S3BotoStorage
from django.contrib.staticfiles.storage import ManifestFilesMixin
class CustomS3Storage(ManifestFilesMixin, S3BotoStorage):
pass
StaticRootS3BotoStorage = lambda: CustomS3Storage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads')
基本上它添加了 ManiFestfilesMixin ,它允许你使用缓存清除。
作为旁注,您可以看到我仅对静态文件使用缓存清除,但对上载文件不使用缓存清除。这就是 MediaRootS3BotoStorage 调用 S3BotoStorage 类而不是 CustomS3Storage 的原因。 我是这样做的,因为上传文件没有存储在我的服务器中(静态文件是),它们直接存储在S3存储桶中,所以当我运行 collectstatic 时,它们不在我的服务器上,所以我不必将哈希添加到名称中。