如何在Wagtail 6的PageListingViewSet中查看子页面列表
在Wagtail 6的PageListingViewSet中实现点击标题跳转至子页面列表
要让PageListingViewSet中带子页面图标的标题点击后跳转到子页面列表,核心是替换标题默认的编辑页链接,改为指向该页面的子页面列表路由。具体实现可以通过自定义标题列来完成:
实现步骤
- 继承
PageListingViewSet,重写get_list_display方法,替换默认的标题列为自定义列。 - 自定义
TitleColumn子类,重写get_link_url方法,生成子页面列表的URL。
完整代码示例
from wagtail.admin.viewsets.pages import PageListingViewSet from wagtail.admin.ui.tables import TitleColumn from django.urls import reverse class MagazineIssueViewSet(PageListingViewSet): model = MagazineIssue menu_label = "Issues" icon = "doc-full-inverse" add_to_admin_menu = True search_fields = ("title",) filterset_class = MagazineIssueFilterSet def get_list_display(self): # 替换默认标题列为自定义的子页面跳转列,保留其他需要的列 return [ self._get_child_list_title_column(), "first_published_at", # 可添加其他需要展示的字段列 ] def _get_child_list_title_column(self): class ChildPageNavTitleColumn(TitleColumn): def get_link_url(self, instance, parent_context=None): # 生成当前页面的子页面列表路由 return reverse( "wagtailadmin_pages:listing", args=[instance.id], ) return ChildPageNavTitleColumn( "title", label="标题", sort_key="title", ) magazine_issue_viewset = MagazineIssueViewSet("magazine_issues")
说明
- 自定义的
ChildPageNavTitleColumn继承自Wagtail内置的TitleColumn,仅重写链接生成逻辑,保留原有的标题样式、子页面图标显示等特性。 - 使用
reverse生成wagtailadmin_pages:listing路由,传入当前页面ID作为父页面参数,即可跳转到该页面的子页面列表页。 - Wagtail的内置路由会自动处理权限验证,无需额外添加权限判断逻辑。
内容的提问来源于stack exchange,提问作者Brylie Christopher Oxley
相关产品推荐
相关产品推荐

