1

我试图了解 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 只是动态创建的?我需要将它存储在某个地方以备后用。

4

2 回答 2

1

我没有 100% 得到它,但据我了解,缩略图是一个生成器,仅在第一次请求缩略图时调用,然后被缓存

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

于 2017-06-04T21:23:44.080 回答
1

默认情况下,ImageKitImageSpecField在需要时生成图像,而不是在创建模型对象时生成。要更改行为,您可以使用缓存文件策略。默认值为,IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY可以JustInTime更改为Optimistic在模型对象创建时创建图像,或自定义策略。

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

于 2019-11-06T10:08:34.570 回答