2013-09-21 8 views
1

Я использую django-хранилища, чтобы позволить пользователю загружать файл изображения в мой S3, и у меня есть облачный дистрибутив, работающий с ведром в s3.Настроить django-storage s3 url?

Я могу загрузить файл на s3, но я не могу изменить URL-адрес файла изображения, чтобы использовать URL-адрес облачного распределения.

URL всегда установлен в URL-адрес s3 bucket.

Есть ли способ настроить URL-адрес?

Благодаря

+0

Может быть, вы хотите переопределить [метод URL] (https://docs.djangoproject.com/en/dev/ref/files/ хранение/# django.core.files.storage.Storage.url) –

ответ

0

подход к решению этой проблемы, что я взял, должен был создать новый templatetag под названием «static_cdn»; и он будет делать некоторые проверки, чтобы сказать: «Я местный, dev, production и т. д.» и соответствующим образом изменяет домен в зависимости от того, где он был. Нет смысла генерировать CDN-трафик, если я просто привожу локально (или, по крайней мере, я еще не там).

Другой подход, который я рассматривал, состоял в том, чтобы полностью переопределить статический тег по умолчанию и поместить туда логику, но пока я хотел сохранить гранулярность, чтобы, если по какой-то причине я хотел получить непосредственно из S3 и а не CloudFront на производственных серверах, у меня была эта способность.

редактирования: Пример кода может выглядеть следующим образом:

# Import: Django 
from django.template import Library 
from django.templatetags.static import static 

# Static CDN 
# - We could probably go in and overwrite the default static template tag 
# and decide to use the CDN or not; for now, though, I want the option 
# (even remotely) to explicitly use the CDN or not. 
def static_cdn(url): 
    if not LOCAL_ENVIRONMENT: 
     # StackOverflow: Do not do this! Import/Write/etc an urljoin (see Django code 
     # for examples - you can probably import the version Django uses internally. 
     return 'https://{0}{1}{2}'.format(AWS_CLOUDFRONT_DOMAIN, STATIC_URL, url) 
    else: 
     return static(url) 

# Register 
register = Library() 
register.simple_tag(static_cdn) 
Смежные вопросы