2013-08-30 3 views
2

Я пытаюсь использовать http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html для обслуживания и статические файлы и загруженные носители, но я не уверен, что это возможно. Есть ли документированный способ, который мне не хватает? Кроме того, я бы предположил (надеюсь), что вы можете настроить отдельное ведро для каждого, но я не могу найти никакой информации об этом.Как использовать django-хранилища как для медиафайлов, так и для статических файлов?

ответ

5

Да, это возможно путем настройки как DEFAULT_FILE_STORAGE, так и STATICFILES_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_AUTH, AWS_S3_CUSTOM_DOMAIN, AWS_PRELOAD_METADATA и т.д., то вы изменили бы их в этом подклассе, а также.

+0

Thanks Mark. То, что я закончил, прежде чем вернуться к вашему более расширяемому решению, заключалось в подклассе хранилища, но переопределить атрибут 'bucket_name' в классе как' bucket_name = setting ('S3_STATIC_STORAGE_BUCKET_NAME') '. –

+0

Да, это та же основная идея. Оба адресовать главную проблему, которая является хранилищем, используемым 'STATICFILES_STORAGE', будут инициализированы с помощью args по умолчанию, kwargs, поэтому вам нужно убедиться, что эти значения по умолчанию - это то, что вы хотите. –

 Смежные вопросы

  • Нет связанных вопросов^_^