我试图了解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})
我正在从应用程序上传头像图像。在配置文件表中创建的条目和在AWS S3中创建的文件可以正常工作。我正在努力理解的是何时/何地/如何创建avatar_缩略图。我是否必须做一些显式的事情来将其与头像图像一起存储在AWS S3中?还是avatar_thumbnail只是在运行中创建的?我需要把它存储在某个地方以备以后使用。
我不完全明白,但据我所知,缩略图是一个生成器,仅在首次请求缩略图时调用,然后缓存。
我个人的经验也说明了这一点。我通过管理界面创建了模型的虚拟实例(与上面的代码相同)。然后,我创建了一个html页面,显示带有模板标记的缩略图(<img src="instance.thumbnail.url">
)。检查我的文件夹,目前还没有生成图像。然后启动服务器,导航到那个页面。在第一次尝试时,它需要花费不寻常的时间来加载(这表明正在创建缩略图),但随后它会加速。文件就在那里。
默认情况下,ImageKit在需要时生成ImageSpecField
图像,而不是在创建模型对象时生成。要更改这种行为,可以使用缓存文件策略。IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY
的默认值为JustInTime
,可以修改为在模型对象创建时创建图像的Optimistic
,也可以自定义策略。
此外,您可以通过提供cachefile_strategy
参数为单个ImageSpecField
设置不同的策略。