我试图了解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是否只是在飞行中创建的?我需要将它存储在某个地方供以后使用。
答案 0 :(得分:0)
我不是100%得到它,但据我所知,缩略图只是在首次请求缩略图时调用的生成器,然后是cached。
我的个人经历也表明了这一点。我通过管理界面创建了模型的虚拟实例(与上面相同的代码)。然后我创建了一个html页面,显示带有模板标记的缩略图(<img src="instance.thumbnail.url">
)。检查我的文件夹,到目前为止没有生成图像。然后我启动一个服务器,导航到该页面。在第一次尝试时,需要花费不寻常的时间(这表明正在创建缩略图),但随后它会加速。文件就在那里。
答案 1 :(得分:0)
默认情况下,ImageKit会在需要ImageSpecField
图像时(而不是在创建模型对象时)生成图像。要更改行为,可以使用cache file strategies。 IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY
的默认值为JustInTime
,可以将其更改为Optimistic
,以在创建模型对象时创建图像,也可以更改为自定义策略。
此外,您可以通过提供ImageSpecField
参数为各个cachefile_strategy
设置不同的策略。