Python/초간단 장고 Django
Django pagenation paginator.num_pages
컴닥
2022. 9. 21. 00:21
반응형
Django의 페이지네이션 기능의
자세한 설명은 다음을 참고하시고..
https://wikidocs.net/71240#_2
3-02 페이징
* `[완성 소스]` : [github.com/pahkey/jump2django/tree/3-02](https://github.com/pahkey/jump2django/tr ...
wikidocs.net
저자께서 마지막에 이런 숙제를 남겨두셨네요.
지금까지 만든 페이징 기능에 '처음'과 '마지막' 링크를 추가하고 ...
def list_view(request):
page = request.GET.get('page', '1')
px_name = request.GET.get('name', '')
if name == '' or name is None:
my_list = My.objects.all().order_by('id')
else:
my_list = My.objects.filter(Q(name__icontains=name)).distinct().order_by('id')
paginator = Paginator(my_list, 10) # 페이지당 10개의 아이템
page_obj = paginator.get_page(page) # 현재 페이지 - 출력할 아이템.
context = {
'my_list': page_obj,
'max_index': paginator.num_pages, # 마지막 페이지
'px_name': px_name
}
return render(request, 'my_project/list_view.html', context)
마지막 페이지는 Pagenator의 객체인 paginator에서 paginator.num_pages 속성으로 알 수 있습니다.
시작 페이지는 1이죠. 어렵지 않습니다.
아래 부분에서 페이지를 계속 내리다 보면 음수로 페이지 접근을 하는데 상당히 불편합니다.
커스텀 템플릿 필터를 만들면 됩니다.
{% if page_number >= question_list.number|add:-5 and page_number <= question_list.number|add:5 %}
@register.filter
def sub(value, arg):
"""subtract"""
return temp if (temp := value - arg) > 1 else 1
반응형