#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
параметр.