사용자 정의 페이지 목록¶
일반적으로 편집자는 페이지 트리 구조를 따라 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