更新的MEDIA_URL未反映在ImageField网址中

时间:2014-07-11 13:14:41

标签: django amazon-s3 django-storage

我正在尝试从在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 个答案:

答案 0 :(得分:0)

哎呀,结果FileField.url属性不使用MEDIA_URL。根据{{​​3}}:

  

<强> FieldFile.url

     

通过调用底层Storage类的url()方法来访问文件的相对URL的只读属性。

就我而言,基础存储类由S3BotoStorage提供django-storages。正如the Django docs所述,以前不支持,但现在可以通过将以下内容添加到settings.py来完成:

AWS_S3_CUSTOM_DOMAIN = 'd2ynhpzeiwwiom.cloudfront.net'

现在它就像一个魅力:

>>> design.image.url
u'https://d2ynhpzeiwwiom.cloudfront.net/media/images/designs/etc/etc'