게시판 만들기 ver.2 (페이징처리 )

팔리동·2021년 4월 6일

페이징 처리

템플릿

<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 class="page-link" href="?p={{ boards.previous_page_number }}"
            >이전으로</a
          >
        </li>
        {% else %}
        <li class="page-item disabled">
          <a class="page-link" href="#">이전으로</a>
        </li>
        {% endif %}
        <li class="page-item active">
          <a class="page-link" href="#"
            >{{boards.number}} / {{ boards.paginator.num_pages }}</a
          >
        </li>
        {% if boards.has_next %}
        <li class="page-item">
          <a class="page-link" href="?p={{ boards.next_page_number }}"
            >다음으로</a
          >
        </li>
        {% else %}
        <li class="page-item disabled">
          <a class="page-link disabled" href="#">다음으로</a>
        </li>
        {% endif %}
      </ul>
    </nav>

이전 페이지가 없으면 disabled속성이 되고 다음페이지나 이전 페이지를 누를 때마다 링크가 ?p={{페이지 숫자가 된다.}}

views

def board_list(request):
    # 역순으로 게시글 가져옴 
    all_boards = Board.objects.all().order_by('-id')
    page = request.GET.get('p', 1)
    paginator = Paginator(all_boards, 2)
    boards = paginator.get_page(page)
    return render(request, 'board_list.html', {'boards': boards})

all_boards 는 Board모델을 아이디 순서대로 정렬하는 객체이다.
page는 아래와 같은 GET 방식 요청 URL에서 p값을 가져올 때 사용한다.

http://127.0.0.1:8000/board/list/?p=1

paginator는 Paginator 객체에 인자로 all_boards를 넣고 숫자 2는 2개씩 보여준다는 뜻이다.
boardspage를 인자로 받아서paginator객체에 get_page함수를 시전한 것을 저장해서 렌더할 때 boards로 html코드를 변환에 전달한다.

profile
배움의 기록

0개의 댓글