Как реализовать миниатюрные изображения в ModelViewSet в Wagtail?
Возможно ли реализовать уменьшенное изображение в ModelViewSet
представлении листинга? Вот пример для модели NewsPost.
class NewsPostViewSet(ModelViewSet):
model = NewsPost
list_display = ["title", "category", "date_start", "date_end", "live"]
add_to_admin_menu = True
icon = "calendar-alt"
menu_label = "News"
В PageListingViewSet
есть колонки со всеми видами столбцов для разных типов моделей. Но также нет «ImageColumn» для отображения уменьшенного изображения. Мне не хватает ThumbnailMixin, который предоставляло приложение Wagtail ModelAdmin и который теперь устарел. Кто-нибудь знает обходной путь?
Этот метод использую я.
from wagtail.admin.ui.tables import TitleColumn
from django.utils.safestring import mark_safe
class ImageColumn(TitleColumn):
def get_cell_context_data(self, instance, parent_context):
context = super().get_cell_context_data(instance, parent_context)
try:
context['value'] = mark_safe(
context['value'].get_rendition(
'height-50').img_tag({'class': "show-transparency"})
)
except:
context['value'] = mark_safe(
'''
<svg class="icon icon-image" height="50px"
viewBox="0 0 24 24" aria-hidden="true">
<use href="#icon-image"></use>
</svg>
'''
)
return context
Пример в наборе представлений сниппета:
class ProductViewSet(SnippetViewSet):
model = Product
list_display = ["title", ImageColumn("image"), "get_department_subcategory", "sku", UpdatedAtColumn()]
К сожалению, вы не можете поместить его в первый столбец, Wagtail не позволяет использовать пользовательские столбцы в этой позиции - он отобразит вид, но без меню действий для элементов списка.
Я наследую TitleColumn
, чтобы изображение было кликабельным в представлении выбора.
Если произошла ошибка (или поле изображения пустое), то будет возвращена общая иконка изображения Wagtail.
В колонке возвращается html, а не данные/шаблон, чтобы сохранить ее целостность.