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):
Другие вопросы по тегам