본문 바로가기
Personal Project

django Paginator 사용하기. 페이징 기법, 페이지 나누기

by applepick 2020. 9. 10.
반응형

기술면접 예상질문 페이지를 구축하고 있습니다. 구축하면서, 글들을 3~5개씩 나눠서 보여줬으면 좋겠어서 사용하게되었습니다.

우선 views.py에서 3~5개씩 나눠서 리스트에 넣는 것부터해야겠죠?

from django.core.paginator import Paginator

def Quizpage(request):
  q = Quiz.objects.order_by('-id')
  q_list = Quiz.objects.all().order_by('-id')
  paginator = Paginator(q_list,3)
  page = request.GET.get('page')
  posts = paginator.get_page(page)
  return render(request, 'Quizpage.html',{'quiz':q, 'posts':posts})

q에다가 일단 Quiz라는 모델링한 것들을 저장해줍니다.

q_list에는 모든 객체들을 넣어줍니다.

paginator에는 q_list를 넣어주고 3개씩 끊어 줍니다.

page는 get방식으로 페이지 url을 설정해줍니다.

postsm는 paginator함수에 페이지를 가져오는 것들 넣어줍니다.

중괄호 안에 있는 것들은 q를 html에서 quiz라고 이름을 지어 사용하겠다, posts 변수를 posts로 가져가서 사용하겠다고 선언해준겁니다.

이렇게하면 views.py는 끝입니다.

 

 

이제 적용할 페이지(html 파일)로 들어갑니다. 버튼 부분 코드를 가져와보겠습니다.

  {% for quiz in posts %}
    <div id="QUIZ">
      <p id="main">{{ quiz.title }}</p>
      <a class="smbutton" href ="{% url 'Quizdetail' quiz.id %}">답변 보기</a>
    </div><br><br>
  {% endfor %}
    <div id="main">
      {%if posts.has_previous%}
        <a class="listbutton" href="?page=1"><button type="button" class="btn btn-dark">첫 번째 페이지</button></a>&nbsp&nbsp&nbsp
      {%endif%}
      {%if posts.has_next%}
        <a href="?page={{posts.next_page_number}}"><button type="button" class="btn btn-dark">다음</button></a>&nbsp&nbsp&nbsp
      {%endif%}
    <span>{{posts.number}}</span>&nbsp
    <span> of </span>&nbsp
    <span>{{posts.paginator.num_pages}}</span>&nbsp&nbsp
    {%if posts.has_previous%}
        <a href="?page={{posts.previous_page_number}}"><button type="button" class="btn btn-dark">이전</button></a>&nbsp&nbsp&nbsp
    {%endif%}
      {%if posts.has_previous%}
         <a class="listbutton" href="?page={{posts.previous_page_number}}"><button type="button" class="btn btn-dark">마지막 페이지</button></a>
      {%endif%}

이런식으로 Paginator내장 함수를 이용해서 손쉽게 만들어낼수있습니다.

 

이런식으로 구현했습니다.

궁금한 점은 댓글로 달아주세요~

 

 

반응형

댓글