이번엔 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 |