Использование sorl.thumbnail без template tags

Админка django с превью картинок

Практически в каждом django-проекте рано или поздно встает вопрос о генерировании превьюшек для картинок. Одним из наиболее простых и удобных решений для этого является sorl.thumbnail. Это приложение позволяет генерировать превьюшки либо прямо в шаблоне через тег {% thumbnail %}, либо используя в моделях специальное поле sorl.thumbnail.ImageField.

В подавляющем большинстве случаев этого достаточно, но иногда возникает необходимость получить превьюшку в python-коде прямо по месту, без переделывания моделей.

К примеру может захотеться видеть совсем маленькие, нигде больше не используемые, превьюшки в списке объектов в админке. Делается это на удивление просто.

from django.utils.html import format_html
from sorl.thumbnail import get_thumbnail

class ProductAdmin(admin.ModelAdmin):
    list_display = ('photo_thumbnail', '__unicode__', 'price')
    list_display_links = ('__unicode__',)

    def photo_thumbnail(self, obj):
        im = get_thumbnail(obj.photo, '60x60', quality=99)
        return format_html(
                '<img src="{}" border="0" alt="" width="{}" height="{}" />',
                            im.url, im.width, im.height)
    photo_thumbnail.short_description = u'Фото'
    photo_thumbnail.allow_tags = True

Результат можно наблюдать в начале этой статьи.


Copyright © 2015 by Sergey Tkachuk.