Я пытаюсь использовать http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html для обслуживания и статические файлы и загруженные носители, но я не уверен, что это возможно. Есть ли документированный способ, который мне не хватает? Кроме того, я бы предположил (надеюсь), что вы можете настроить отдельное ведро для каждого, но я не могу найти никакой информации об этом.Как использовать django-хранилища как для медиафайлов, так и для статических файлов?
ответ
Да, это возможно путем настройки как 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
и т.д., то вы изменили бы их в этом подклассе, а также.
Thanks Mark. То, что я закончил, прежде чем вернуться к вашему более расширяемому решению, заключалось в подклассе хранилища, но переопределить атрибут 'bucket_name' в классе как' bucket_name = setting ('S3_STATIC_STORAGE_BUCKET_NAME') '. –
Да, это та же основная идея. Оба адресовать главную проблему, которая является хранилищем, используемым 'STATICFILES_STORAGE', будут инициализированы с помощью args по умолчанию, kwargs, поэтому вам нужно убедиться, что эти значения по умолчанию - это то, что вы хотите. –