2

我正在尝试从 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'

是什么赋予了?旧信息仍存储在哪里,如何将其清除?

4

1 回答 1

2

糟糕,原来该FileField.url物业不使用MEDIA_URL. 根据Django 文档

字段文件.url

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

就我而言,底层存储类S3BotoStoragedjango-storages. 正如这个现已弃用的 fork所指出的,这以前不受支持,但现在可以通过将以下内容添加到来完成settings.py

AWS_S3_CUSTOM_DOMAIN = 'd2ynhpzeiwwiom.cloudfront.net'

现在它就像一个魅力:

>>> design.image.url
u'https://d2ynhpzeiwwiom.cloudfront.net/media/images/designs/etc/etc'
于 2014-07-11T13:25:37.590 回答