如何将django-storage用于媒体和静态文件?

时间:2013-08-30 15:30:39

标签: python django amazon-s3 django-storage

我正在尝试使用http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html来提供 静态文件上传媒体,但我不确定是否可行。有没有记录的方式我错过了?另外,我假设(希望)您可以为每个配置一个单独的存储桶,但我找不到任何相关信息。

1 个答案:

答案 0 :(得分:5)

是的,可以通过配置DEFAULT_FILE_STORAGESTATICFILES_STORAGE来使用S3存储。但是,如果你设置

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

然后这些都将使用S3存储的默认设置,这意味着它们都将使用AWS_STORAGE_BUCKET_NAME存储桶。解决此问题的方法是在项目中创建一个小的S3BotoStorage子类,它使用不同的存储桶名称设置。

from django.conf import settings

from storages.backends.s3boto import S3BotoStorage

class S3StaticStorage(S3BotoStorage):

    def __init__(self, *args, **kwargs):
        kwargs['bucket']  = settings.AWS_STATIC_BUCKET_NAME
        super(S3StaticStorage, self).__init__(*args, **kwargs)

然后,您可以将AWS_STATIC_BUCKET_NAME设置定义为您想要的静态存储桶,并将AWS_STATIC_BUCKET_NAME更改为此自定义存储类的路径。

STATICFILES_STORAGE = 'dotted.path.to.storage.S3StaticStorage'

如果您想更改其他设置,例如AWS_QUERYSTRING_AUTHAWS_S3_CUSTOM_DOMAINAWS_PRELOAD_METADATA等,那么您也可以在此子类中更改它们。