이번엔 breads app을 살펴볼 예정이다. 이곳은 paginate 기능 이외에는 특별한 것이 없다. 그래서 paginate만 분석해보고 넘어갈 생각이다. 

 

# Returns a queryset of BreadPage objects that are live, that are direct
    def get_breads(self):
        return BreadPage.objects.live().descendant_of(
            self).order_by('-first_published_at')

    def children(self):
        return self.get_children().specific().live()

    def paginate(self, request, *args):
        page = request.GET.get('page')
        paginator = Paginator(self.get_breads(), 12)
        try:
            pages = paginator.page(page)
        except PageNotAnInteger:
            pages = paginator.page(1)
        except EmptyPage:
            pages = paginator.page(paginator.num_pages)
        return pages

    def get_context(self, request):
        context = super(BreadsIndexPage, self).get_context(request)

        # BreadPage objects (get_breads) are passed through pagination
        breads = self.paginate(request, self.get_breads())

        context['breads'] = breads

        return context

Wagtail에서 paginate기능을 제공해준다. 우리는 가져다가 사용하기만 하면 된다.

 

일단

def get_breads(self):
        return BreadPage.objects.live().descendant_of(
            self).order_by('-first_published_at')

로 breadpage의 object들을 전부 가져온다. descendant_of는 현재 Class 인 BreadIndexPage의 자식요소 즉 BlogPage를 가르킨다. 즉 해석하면 이 BreadIndexpage의 BreadPage의 publish된 object들을 시간순으로 전부 가져오라는 뜻이다. 

 

def children(self):
        return self.get_children().specific().live()

은 blogpage의 attribute를 사용하기 위해 children으로 정의를 해 놓았다.

 

일단 

page = request.GET.get('page') 로 현재의 page를 GET 해온다. 그리고 Paginator를 통해 get_breads()에서 정의한 breadpages을 12개 기준으로 가져온다. 

paginator의 page attribute에 page를 담고 return한다. 

이제 get_context method를 통해 breads라는 이름으로 template에 전달한다. 

 

정리하자면 BreadIndexPage에 있는 BreadPage들을 가져와서 12개씩 paginate를 하고 전달해주는 방식이다. 관련한 template은 include/pagination.html에 작성되어 있다. 

 

 

'Back-End > Wagtail, Django' 카테고리의 다른 글

Wagtail All Auth(Google Login)  (0) 2021.08.25
Wagtail Docker 사용 방법  (0) 2021.08.18
Wagtail demo site (blog)  (0) 2021.08.17
Wagtail demo site (base)  (0) 2021.08.15
Wagtail 이미지  (0) 2021.08.13

+ Recent posts