Когда Django ImageKit создает файл эскизов?

#django #django-imagekit

#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})  

Я загружаю изображение аватара из приложения. Это отлично работает с записью, сделанной в таблице профилей, и файлом, созданным в AWS S3. Я изо всех сил пытаюсь понять, когда / где / как создается avatar_thumbnail . Должен ли я сделать что-то явное, чтобы сохранить его в AWS S3 вместе с изображением аватара? Или avatar_thumbnail создается только «на лету»? Мне нужно, чтобы он где-то хранился для последующего использования.

Ответ №1:

Я не понимаю его на 100%, но из того, что я понял, эскиз — это генератор, который вызывается только при первом запросе эскиза, а затем кэшируется.

Мой личный опыт работы с ним также говорит об этом. Я создал фиктивный экземпляр модели (тот же код, что и выше) через интерфейс администратора. Затем я создал HTML-страницу, на которой отображаются эскизы с тегированием шаблонов ( <img src="instance.thumbnail.url"> ). Проверяю мои папки, пока изображений не создано. Затем я запускаю сервер, перехожу на эту страницу. Загрузка занимает необычно много времени (это указывает на то, что эскизы создаются) с первой попытки, но затем она ускоряется. И файлы есть.

Ответ №2:

По умолчанию ImageKit генерирует ImageSpecField изображения, когда они необходимы, а не при создании объекта модели. Чтобы изменить поведение, вы можете использовать стратегии файлов кэша. Значение по умолчанию — это значение IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY JustInTime , которое можно изменить на Optimistic которое создаются изображения при создании объекта модели или на пользовательскую стратегию.

Кроме того, вы можете установить различные стратегии для отдельных ImageSpecField файлов, указав cachefile_strategy параметр.