有没有办法在 Wagtail 模型管理记录列表页面中显示图像?

问题描述 投票:0回答:2

我已经审查了关于 有什么方法可以在 Wagtail 管理中的列表页面上显示字段吗? 但我的情况似乎相似但又足够不同,以至于该特定解决方案对我不起作用。 我希望在模型管理列表上实现类似的功能,而不是在页面列表上,并且我认为这应该是一个常见的要求,因此我认为在我尝试之前一定有人已经完成了此操作。

我还没有真正弄清楚如何尝试开始,但我看到的是 GitHub 上 wagtail.contrib.modeladmin 下的 modeladmin 模板标签,但我完全猜测。

任何人都可以指出我需要修改哪些模板以及我是否需要修改任何模板标签以及如何覆盖我需要覆盖的任何内容?

wagtail
2个回答
2
投票

无需为此覆盖模板 - 这是 ModelAdmin 中的标准功能。通过在 ModelAdmin 类上设置

list_display
来添加额外的字段到列表中:

class BookAdmin(ModelAdmin):
    model = Book
    list_display = ('title', 'author')

为了显示图像,ModelAdmin 提供了

ThumbnailMixin
:

from wagtail.contrib.modeladmin.mixins import ThumbnailMixin
from wagtail.contrib.modeladmin.options import ModelAdmin

class BookAdmin(ThumbnailMixin, ModelAdmin):
    model = Book
    thumb_image_field_name = 'cover_image'
    list_display = ('title', 'author', 'admin_thumb')

'admin_thumb'
是ThumbnailMixin提供的特殊用途字段名称,应该使用而不是模型上的实际图像字段 - 在此示例中为
cover_image
。)


0
投票

modeladmin
功能在
wagtail>=6
版本中不再可用(但之前的contrib模块仍然可用,如https://github.com/wagtail-nest/wagtail-modeladmin)。

您可以使用新的

PageListingViewSet
类来实现类似的结果。

这是带有缩略图的 Wagtail 管理页面列表,假设模型为

ProfilePage
并且图像字段为
avatar_image
:

# file: wagtail_hooks.py

from wagtail import hooks
from wagtail.admin.viewsets.pages import PageListingViewSet
from wagtail.admin.ui.tables import Column, BooleanColumn, BaseColumn

from .models import ProfilePage

class ImageColumn(BaseColumn):
    cell_template_name = "wagtailadmin/tables/cell_image.html"

    def get_cell_context_data(self, instance, parent_context):
        context = super().get_cell_context_data(instance, parent_context)

        image_field = getattr(instance, self.name, None)
        if image_field:
            context["image_url"] = image_field.get_rendition(
                "fill-50x70|jpegquality-92"
            ).url
            context["image_alt"] = instance.title
        return context

class ProfilePageListingViewSet(PageListingViewSet):
    icon = "group"
    menu_label = "Profiles"
    add_to_admin_menu = True
    model = ProfilePage

    columns = PageListingViewSet.columns + [
        ImageColumn("avatar_image", label="Image"),
        Column("last_published_at"),
    ]

profile_page_listing_viewset = ProfilePageListingViewSet("profile_pages")

@hooks.register("register_admin_viewset")
def register_profile_page_listing_viewset():
    return profile_page_listing_viewset
<!-- templates/wagtailadmin/tables/cell_image.html -->
<td>
    <img src="{{ image_url }}" alt="{{ image_alt }}">
</td>
© www.soinside.com 2019 - 2024. All rights reserved.