Изображение по умолчанию для Django easy_thumbnails
У меня есть модель с ImageField, которую я отображаю с помощью easy_thumbnails (|thumbnail_url).
У меня вопрос, как мне отобразить изображение по умолчанию, если поле ImageField пустое?
Я хотел бы эту логику в модель / представление, а не в HTML / шаблон.
например:
DEFAULT_PICTURE = 'default.jpg'
def get_picture(self):
if self.picture:
return self.picture
else:
from DEFAULT_PICTURE
Какой объект должен вернуть get_picture(), который совместим с easy_thumbnails?
Я пытался создать новый объект File, как здесь, но он не работал.
Не могли бы вы предоставить рабочий пример возврата существующего файла для отображения с easy_thumbnails?
2 ответа
Крис ( easy_thumbnails) ответил здесь, а также на SO.
Его предложение создать новый ImageFieldFile хорошо, но по-прежнему не удалось выполнить easy_thumbnails, потому что во вновь созданном ImageFieldFile был пустой экземпляр.
Так что либо установить instance = self
:
DEFAULT_PICTURE = 'default.jpg'
def get_picture(self):
if self.picture:
return self.picture
else:
return ImageFieldFile(instance=self, field=FileField(), name=DEFAULT_PICTURE)
или измените строку alias.py 116:
if not hasattr(target, 'instance'):
return None
должно быть...
if not hasattr(target, 'instance') or not target.instance:
return None
Это код, который я использовал ранее. Возможно, его можно было бы немного оптимизировать (и, возможно, он не должен иметь жестко закодированный путь передачи мультимедиа), но он хорошо работал для моего небольшого проекта.
def get_picture(self):
if self.picture:
return '<img src="%s" />' % self.picture['thumbnail'].url
return '{img src="/media/img/admin/icon-no.gif" alt="No Image"}'
При этом вам просто нужно убедиться, что у вас есть icon-no.gif
в соответствующем пути.