IT 개발/Django
[Django] 장고, paging 구현방법 (게시판 페이징 구현방법)
KADOSHOLY
2024. 1. 2. 02:11
반응형
Django - 장고, paging 구현방법 (게시판 페이징 구현방법)
목차
- 게시판 페이징 구현방법
- urls.py
- testapp > models.py
- testapp > views.py
- templates > testapp > member.html
- 실행결과
1. 게시판 페이징 구현방법
게시판에서 항목이 많은 경우 페이지별로 나누어 보여주어야 되기 때문에 페이징 기능을 구현해야 합니다. 여기에서는 장고에서 페이징 구현예제를 살펴보도록 하겠습니다.
1) urls.py
# config > urls.py
urlpatterns = [
path("testapp/", include('testapp.urls')),
]
# testapp > urls.py
urlpatterns = [
path('member/', views.member, name='member')
]
2) testapp > models.py
from django.db import models
class TestTb(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20, blank=True, null=True)
age = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'test_tb'
3) testapp > views.py
from django.shortcuts import redirect, render
from testapp.models import TestTb
from django.core.paginator import Paginator
def member(request):
now_page = request.GET.get('page', 1)
data = TestTb.objects.all()
p = Paginator(data, 2)
info = p.page(now_page)
start_page = (int(now_page)-1) // 10 * 10 + 1
end_page = start_page + 9
if end_page > p.num_pages:
end_page = p.num_pages
page_range = range(start_page, end_page+1)
context = {'info':info,
'page_range':page_range,
'start_page':start_page !=1,
'end_page':end_page % 10 == 0,
}
return render(request, 'testapp/member.html', context)
4) templates > testapp > member.html
- bootstrap@5.3.1 사용
- 변수에 숫자를 더하거나 빼는 방법 : {{ 변수 | add : "-10" }}
<!DOCTYPE html>
<html lang="en">
<head>...</head>
<body style='margin:30px; text-align: center;'>
<table class='table table-striped'>
<tr class="table-primary">
<td>번호</td>
<td>이름</td>
<td>나이</td>
</tr>
{% for data in info %}
<tr>
<td>{{ data.id }}</td>
<td>{{ data.name }}</td>
<td>{{ data.age }}</td>
</tr>
{% endfor %}
</table>
<div style='text-align:center;'>
<ul class='pagination justify-content-center'>
{% if start_page %}
<li class="page-item">
<a class="page-link"
href='{% url "member" %}?page={{ page_range.0 | add:"-10" }}'> << </a>
</li>
{% endif %}
{% if info.has_previous %}
<li class="page-item">
<a class="page-link"
href='{% url "member" %}?page={{ info.previous_page_number }}'> < </a>
</li>
{% endif %}
{% for i in page_range %}
<li class="page-item">
<a class="page-link" href='{% url "member" %}?page={{ i }}'> {{ i }} </a>
</li>
{% endfor %}
{% if info.has_next %}
<li class="page-item">
<a class="page-link"
href='{% url "member" %}?page={{ info.next_page_number }}'> > </a>
</li>
{% endif %}
{% if end_page %}
<li class="page-item">
<a class="page-link"
href='{% url "member" %}?page={{ page_range.0 | add:"10" }}'> >> </a>
</li>
{% endif %}
</ul>
</div>
</body>
</html>
[실행결과]
반응형