在Django中如何顺利使用django-storages、boto和easy_thumbnail?

5 投票
2 回答
2049 浏览
提问于 2025-04-16 02:15

我正在制作一个网站,管理员可以通过这个网站上传文件,然后这些文件会存储在亚马逊的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 一样的存储方式)。

撰写回答