Когда 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 всегда создается «на лету»? Мне нужно где-то хранить его для дальнейшего использования.


person Bill Noble    schedule 15.10.2016    source источник


Ответы (2)


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

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

person Kostas Mouratidis    schedule 04.06.2017

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

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

person Kueruetsch    schedule 06.11.2019