사용자 정의 페이지 목록

일반적으로 편집자는 페이지 트리 구조를 따라 Wagtail 관리자 인터페이스를 탐색합니다. 그러나 이로 인해 특히 페이지가 깊은 계층 구조로 구성된 대규모 사이트에서 편집할 특정 페이지를 찾는 데 시간이 오래 걸릴 수 있습니다.

사용자 정의 페이지 목록은 Wagtail 관리자 메뉴의 메뉴 항목에서 액세스하는 지정된 유형의 모든 페이지의 플랫 목록을 제공하는 방법이며, 편집자는 이 목록을 검색하고 필터링하여 관심 있는 페이지를 찾을 수 있습니다. 사용자 정의 페이지 목록을 정의하려면 PageListingViewSet 의 하위 클래스를 만들고 register_admin_viewset 후크를 사용하여 등록합니다.

예를 들어 사이트에서 BlogPage 페이지 유형을 구현한 경우 앱 내의 wagtail_hooks.py 파일에 다음 정의를 추가하여 Wagtail 관리자에 “블로그 페이지” 목록을 제공할 수 있습니다.

# myapp/wagtail_hooks.py
from wagtail import hooks
from wagtail.admin.viewsets.pages import PageListingViewSet

from myapp.models import BlogPage


class BlogPageListingViewSet(PageListingViewSet):
    icon = "globe"
    menu_label = "블로그 페이지"
    add_to_admin_menu = True
    model = BlogPage


blog_page_listing_viewset = BlogPageListingViewSet("blog_pages")
@hooks.register("register_admin_viewset")
def register_blog_page_listing_viewset():
    return blog_page_listing_viewset

목록의 열은 뷰셋에서 columns 속성을 재정의하여 사용자 정의할 수 있습니다. 이것은 wagtail.admin.ui.tables.Column 인스턴스의 목록이어야 합니다.

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

from myapp.models import BlogPage

class BlogPageListingViewSet(PageListingViewSet):
    # ...
    columns = PageListingViewSet.columns + [
        Column("blog_category", label="카테고리", sort_key="blog_category"),
    ]

목록의 필터링 옵션은 뷰셋에서 filterset_class 속성을 재정의하여 사용자 정의할 수 있습니다.

from wagtail import hooks
from wagtail.admin.viewsets.pages import PageListingViewSet

from myapp.models import BlogPage


class BlogPageFilterSet(PageListingViewSet.filterset_class):
    class Meta:
        model = BlogPage
        fields = ["blog_category"]


class BlogPageListingViewSet(PageListingViewSet):
    # ...
    filterset_class = BlogPageFilterSet