Django ImageKit何时创建缩略图文件?

时间:2016-10-15 18:10:59

标签: django django-imagekit

我试图了解Django ImageKit如何处理创建缩略图文件(例如)。我正在使用示例代码:

from django.db import models
from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFill

class Profile(models.Model):
    avatar = models.ImageField(upload_to='avatars')
    avatar_thumbnail = ImageSpecField(source='avatar',
                                      processors=[ResizeToFill(100, 50)],
                                      format='JPEG',
                                      options={'quality': 60})

我正在从应用上传头像图片。这适用于在Profile表中创建的条目和在AWS S3中创建的文件。我正在努力理解的是avatar_thumbnail何时/何地/如何创建。我是否必须做一些明确的事情才能将其与头像图像一起存储在AWS S3中?或者avatar_thumbnail是否只是在飞行中创建的?我需要将它存储在某个地方供以后使用。

2 个答案:

答案 0 :(得分:0)

我不是100%得到它,但据我所知,缩略图只是在首次请求缩略图时调用的生成器,然后是cached

我的个人经历也表明了这一点。我通过管理界面创建了模型的虚拟实例(与上面相同的代码)。然后我创建了一个html页面,显示带有模板标记的缩略图(<img src="instance.thumbnail.url">)。检查我的文件夹,到目前为止没有生成图像。然后我启动一个服务器,导航到该页面。在第一次尝试时,需要花费不寻常的时间(这表明正在创建缩略图),但随后它会加速。文件就在那里。

答案 1 :(得分:0)

默认情况下,ImageKit会在需要ImageSpecField图像时(而不是在创建模型对象时)生成图像。要更改行为,可以使用cache file strategiesIMAGEKIT_DEFAULT_CACHEFILE_STRATEGY的默认值为JustInTime,可以将其更改为Optimistic,以在创建模型对象时创建图像,也可以更改为自定义策略。

此外,您可以通过提供ImageSpecField参数为各个cachefile_strategy设置不同的策略。