Обновленный MEDIA_URL не отражен в URL ImageField

Я пытаюсь перейти от обслуживания файлов на Amazon S3 к Amazon CloudFront, поэтому я обновил свой settings.py, Раньше у меня было такое:

S3_URL = 'http://{}.s3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)
STATIC_URL = S3_URL + STATIC_DIRECTORY
MEDIA_URL = S3_URL + MEDIA_DIRECTORY

Я обновил это следующим образом:

#S3_URL = 'http://{}.s3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)
S3_URL = 'http://d2ynhpzeiwwiom.cloudfront.net'

В консоли обновлены настройки:

>>> from django.conf import settings
>>> settings.MEDIA_URL
'http://d2ynhpzeiwwiom.cloudfront.net/media/'

Но не на моей модели ImageField:

>>> design.image.url
'https://bucketname.s3.amazonaws.com/media/images/designs/etc/etc'

Что дает? Где еще хранится старая информация и как ее удалить?

1 ответ

Решение

Ой, получается FileField.url собственность не использует MEDIA_URL, Согласно документации Django:

FieldFile.url

Доступное только для чтения свойство для доступа к относительному URL-адресу файла путем вызова метода url() базового класса Storage.

В моем случае базовый класс хранения был S3BotoStorage предоставлено django-storages, Как уже отмечалось в этой устаревшей ветке, ранее это не поддерживалось, но теперь это можно сделать, добавив следующее в settings.py:

AWS_S3_CUSTOM_DOMAIN = 'd2ynhpzeiwwiom.cloudfront.net'

Теперь это работает как шарм:

>>> design.image.url
u'https://d2ynhpzeiwwiom.cloudfront.net/media/images/designs/etc/etc'
Другие вопросы по тегам