본문 바로가기
Django

[Django] 테이블 paginator

by 이농이능 2018. 1. 22.

장고에서는 테이블을 view에서 만들어서 보낼 수 있고

심지어 페이징 기능도 가능하다 !!


출처 : https://simpleisbetterthancomplex.com/tutorial/2016/08/03/how-to-paginate-with-django.html



The Paginator

# auth.User 테이블에 53개의 인스턴스가 있을 때

from django.contrib.auth.models import User
from django.core.paginator import Paginator

user_list = User.objects.all()
paginator = Paginator(user_list, 10)

#예시를 보면 Paginator 는 한 화면에 보여지는 것을 10개로 제한하였기 때문에 총 6개의 페이지가 만들어지고 다섯 페이지에서는 10개의 user 리스트가 보여지고 마지막 페이지에서는 3명의 user 리스트만 보여지게 된다.




#직접 구현한 코드


views.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def index(request):
    samelines = SameLine.objects.all()
    page = request.GET.get('page',1)
 
    paginator = Paginator(samelines, 10)
    try:
        lines = paginator.page(page)
    except PageNotAnInteger:
        lines = paginator.page(1)
    except EmptyPage:
        lines = paginator.page(paginator.num_pages)
 
    context = { 'samelines':lines }
    return render(request,'samelines/index.html',context)
cs


index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<body>
<div class="container">
    <table class="table table-striped">
        <tbody>
              {% for sameline in samelines %}
              <tr>
              <td>{{ sameline.line }}</td>
              </tr>
              {% endfor %}
        <tbody>
    </table>
    
    {% if samelines.has_other_pages %} # 한 화면에 10개씩 보여주는 경우에 다음 페이지가 있을 경우
      <ul class = "pagination">
        {% if samelines.has_previous %} # 현재 페이지에서 이전페이지가 존재할 때, << 활성화, 없을 경우 비활성화
          <li><a href="?page={{ samelines.previous_page_number }}">&laquo;</a></li>
        {% else %}
          <li class = "disabled"><span>&laquo;</span></li>
        {% endif %}
        
        {% for i in samelines.paginator.page_range %} # 페이지를 전부 보여준다
          
{% if samelines.number == i %} # 현재 보고 있는 페이지일 경우에 다르게 표시해준다
            <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
          {% else %}
            <li><a href="?page={{ i }}">{{ i }}</a></li>
          {% endif %}
        {% endfor %}
        
        {% if samelines.has_next %} # 현재 페이지에서 다음페이지가 존재할 때, >> 활성화, 없을 경우 비활성화
            <li><a href="?page={{ samelines.next_page_number }}">&raquo;</a></li>
        {% else %}
            <li class="disabled"><span>&raquo;</span></li>
        {%endif %}
        </ul>
    {%endif%}
</body>

cs