# Картинка class Image(models.Model): title = models.CharField(max_length=255) imgfile = models.ImageField(upload_to='img/') def image_img(self): if self.imgfile: return u'< img src="%s" width="100"/>' % self.imgfile.url else: return '(none)' image_img.short_description = 'Thumb' image_img.allow_tags = TrueОбратите внимание на image_img.allow_tags — это говорит о том, что разрешены сырые теги на выходе. Ещё я захардкодил размер картинки-превьюшки в image_img, можно как-то передавать и настраивать, но для простоты опустим. Также понятно, что картинка останется фактически большая, просто сожмётся визуально. Можно использовать специальную либу (есть удобные модули итд) и резать превьюшки, чтобы они были действительно мелкими.
Итак, превьюшка в таблице в админке делается элементарно, практически стандартным способом. В admin.py пишем в МодельАдмин:
... class ImageAdmin(admin.ModelAdmin): list_display = ('title','imgfile','image_img', ) … … admin.site.register(Image,ImageAdmin) …Результат:
Сложнее сделать предпросмотр в форме редактирования. Расскажу как сделал. Нам надо переопределить шаблон админки, он называется change_form.html. Создаём в своём каталоге с шаблонами файл такого вида: admin/приложение/модель/change_form.html . То есть, например, у меня так: .../templates/admin/db/image/change_form.html
Внутри переопределяем блок form_top. Можно и другой какой-то, на своё усмотрение, короче. Но этот удобен и, похоже, специально создан (пустым) для переопределения. Исходная модель в шаблоне именуется как original. Берём у неё точно так же метод image_img. И обязаельно применяем фильтр safe (чтобы теги не эскейпил). Получается такое:
{% extends "admin/change_form.html" %} {% block form_top %} {{ original.image_img|safe }} {% endblock %}Результат:
Комментариев нет:
Отправить комментарий