Django-Filebrowser не может создать версию с автоматической шириной и ограниченной высотой?
Я использовал Django-Filebrowser и настраивал свои версии, как указано в документации, которые указывают, что вы указываете версии изображений следующим образом:
VERSIONS = getattr(settings, "FILEBROWSER_VERSIONS", {
'thumbnail': {'verbose_name': 'Thumbnail (1 col)', 'width': 60, 'height': 60, 'opts': 'crop'},
'small': {'verbose_name': 'Small (2 col)', 'width': 140, 'height': '', 'opts': ''},
})
... обратите внимание на "маленький" размер версии с неопределенной высотой, который успешно генерирует версию изображения с ограниченной шириной и автоматической высотой. Это успешно работает для меня, однако обратное не работает (ограниченная высота, но автоматическая ширина):
'auto_width': {'verbose_name': 'Auto Width', 'width': '', 'height': 140, 'opts': ''},
Есть ли здесь какой-то трюк, который я пропускаю, или библиотека не имеет этой способности?
1 ответ
Я просто столкнулся с той же проблемой и решил ее: https://github.com/sehmaschine/django-filebrowser/issues/278
В баге есть ошибка scale_and_crop
функция в utils.py
при попытке генерировать версии с фиксированной высотой и автоматической шириной (наоборот) работает как шарм). Изображение версий будет создано, но с оригинальным размером.
Пример определения VERSION:
FILEBROWSER_VERSIONS = {
'medium': {'verbose_name': 'Medium (4col )', 'width': '', 'height': 250, 'opts': ''},
}
Причина в том, что переменная width - это пустая строка, которая сравнивается с плавающей точкой, поэтому оператор if возвращает False, и изображение не будет изменено.
Один из способов исправить это - преобразовать строку ширины в число с плавающей точкой для сравнения в utils.py
:
66c65
< if 'upscale' not in opts and x < width:
---
> if 'upscale' not in opts and x < float(width or 0):