在Django中如何顺利使用django-storages、boto和easy_thumbnail?
我正在制作一个网站,管理员可以通过这个网站上传文件,然后这些文件会存储在亚马逊的S3上。我使用的是django-storages和boto,这一切看起来都很顺利。
问题是,我习惯在模板中使用easy_thumbnails(现在叫sorl.thumbnail)来动态生成缩略图。我更喜欢这种方法,因为如果将来我想改变缩略图的大小,这样维护起来会更简单。
但是我发现,easy_thumbnails似乎不太喜欢读取现在存储在亚马逊S3上的图片。而且,我也意识到,生成的缩略图到底会放在哪里呢?显然,我希望这些缩略图也能存储在亚马逊S3上。那么,我该如何让这两种技术协同工作呢?
我该如何让easy_thumbnails把生成的缩略图存回亚马逊S3?还是说我对这一切的理解有问题?
谢谢!
2 个回答
-2
我改变了我的使用方式...
我修改了我的模型,增加了一个字段用来存放缩略图:
class Photo(models.Model)
image = models.ImageField(upload_to=image_upload_to)
thumb_a = ThumbnailerImageField(upload_to=thumb_a_upload_to, resize_source=dict(size=(98,98), crop='center'),)
在模板上,我不再使用:
{% load thumbnail %}
<img src="{% thumbnail photo.image 98x98 crop='center' %}">
而是改成了...
<img src="{{photo.thumb_b.url}}">
现在我上传照片时,我这样做...
for i in listOfImages:
form = CreatePhotoForm(request.POST, i)
if form.is_valid():
asdf = form.save(commit=False)
asdf.owner = request.user
asdf.image = i
asdf.thumb_a = i
asdf.title = str(i)
asdf.save()
效果挺不错的。
18
easy_thumbnails 可以帮你处理基于 S3 的图片缩略图生成,你只需要设置一下 settings.THUMBNAIL_DEFAULT_STORAGE
,这样 easy_thumbnails 就知道该用哪个存储方式了(在你的情况下,可能想把它设置成和你用的 ImageFields 一样的存储方式)。