ABOUT ME

Computer, Music, Video.

Today
Yesterday
Total
  • Django pagenation paginator.num_pages
    Python/초간단 장고 Django 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
    반응형
Designed by Tistory.