Админка вроде всем хороша но есть в ней пара моментов, которые портят картину. Один из них весьма условный — это отсутствие WYSIWYG редактора. Условный он потому, что вопреки разным мнениям я все же уверен, что нужен он далеко не всегда. В большенстве случаев можно и нужно обходится чем-то вроде markdown или вообще ничем.
Второй — редактирование объектов, содержащих изображение. Проще говоря это фотки, или другие объекты к которым прицеплены картинки.
Ориентироваться в списке фоток не видя этих самых фоток очень неудобно. И я давно намеревелся найти решение этой проблемы. Пример мой подойдет тем кто использует sorl.thumbnail для создания миниатюр на сайте. Но если у вас голова не из говна, то вам не составит труда переписать процесс получения url-а миниатюрки. В целом можно сказать, что вся фишка этого поста в том, как воткнуть миниатюрку в список объектов не редактируя шаблон. Идея взята из блога чувака по имени Филипп Рудь и описана она еще в 2009 году, но работает и по сей день. Я лишь приебашил к этому делу sorl.thumbnail.
Итак суть этого способа в том, чтобы создать метод модели, который и будет отдавать html код картинки. А потом, этот метод указать в настроечном классе админки в параметре list_display. Вот так оказалось все просто.
Вот код модели:
Вот настроечный класс:from sorl.thumbnail.shortcuts import get_thumbnail ... class Photos(models.Model): title = models.TextField(u'Заголовок') tags = TagField(u'Теги') image = ImageField(upload_to='img/photos/', verbose_name=u'Файл') def get_thumbnail_html(self): img = self.image img_resize_url = unicode(get_thumbnail(img, '100x100').url) html = '<a class="image-picker" href="%s"><img src="%s" alt="%s"/></a>' return html % (self.image.url, img_resize_url, self.title) get_thumbnail_html.short_description = u'Миниатюра' get_thumbnail_html.allow_tags = True
class PhotoAdmin(admin.ModelAdmin): list_display = ['get_thumbnail_html', 'title', 'tags'] list_display_links = ['title', ] admin.site.register(Photos, PhotoAdmin)
Комментариев нет:
Отправить комментарий