본문 바로가기

프로그래밍/Python

[Django] 게시판 페이지 네비게이션(page navigation)

[Django] 게시판 페이지 네비게이션(page navigation)


 바로 가져다 쓰는 파이썬 코드

 장고를 이용한 게시판 생성시 페이지 네비게이션 처리 방법을 알아 본다

1. VIEW (views.py)

  장고에서 제공하는 Paginator를 사용하면 간단히 작성할 수 있다.

from django.core.paginator import Paginator # Create your views here. def board_list(request): all_boards = Board.objects.all().order_by('-id') # 게시물 전체를 얻고 page = request.GET.get('p', 1) # 현재 네비게이션 중인 페이지 번호를 얻는다. paginator = Paginator(all_boards, 2) # pagenavigator 객체를 생성한다. boards = paginator.get_page(page) # 현재 페이지에 해당하는 게시물만 얻는다.

# 템플릿(board_list.html)에 게시물 정보를 넘긴다

# boards에는 현재 네비게이션중인 정보가 함께 전달된다. return render(request, 'board_list.html', {'boards': boards})


2. TEMPLATEs (board_list.html)

  * 이전 / 다음페이지가 없는 경우 예외처리 및 비활성 처리 주의

<div class="row mt-2">
    <div class="col-12">
        <nav>
            <ul class="pagination justify-content-center">
                {% if boards.has_previous %}
                <li class="page-item">
                    <a href="?p={{ boards.previous_page_number }}" class="page-link">이전으로</a>
                </li>
                {% else %}
                <li class="page-item disabled">
                    <a href="#" class="page-link">이전으로</a>
                </li>
                {% endif %}
                <li class="page-item active">
                    <a href="#" class="page-link">{{ boards.number }} / {{ boards.paginator.num_pages }}</a>
                </li>
                {% if boards.has_next %}
                <li class="page-item">
                    <a href="?p={{ boards.next_page_number }}" class="page-link">다음으로</a>
                </li>
                {% else %}
                <li class="page-item disabled">
                    <a href="#" class="page-link">다음으로</a>
                </li>
                {% endif %}
            </ul>
        </nav>
    </div>
</div>


3. 결과보기 화면(snapshot)