management/commands 폴더 만들기
폴더 구조 조심!!

make_post.py 파일을 만드후 아래의 명령어
import sys
from typing import Any
from django.core.management import BaseCommand
from boards.models import Post
class Command(BaseCommand):
def handle(self, *args, **options):
print("make post start :)")
for i in range(1, 101):
# Todo.objects.create(name=f"테스트 todo {i}", complete=choice([True, False]))
# todo = Todo.objects.create(name=f"테스트 todo {i}")
post, created = Post.objects.get_or_create(title=f"테스트 post {i}",content=f"테스트 post {i}")
if created:
print(f"{i}번째 todo 생성 완료")
else:
print(f"{i}번째 todo 이미 존재")
sys.stdout.write(self.style.SUCCESS("make post end :)"))
print(post)
python manage.py make_post

def index(request):
page = request.GET.get('page', '1') # 페이지
post_list = Post.objects.order_by('-created_at')
paginator = Paginator(post_list, 10) # 페이지당 10개씩 보여주기
page_obj = paginator.get_page(page)
context = {'post_list': page_obj}
#context = {'post_list': post_list}

page = request.GET.get('page', '1')은 http://localhost:8000/boards/?page=1 처럼 GET 방식으로 호출된 URL에서 page값을 가져올 때 사용한다.
만약 http://localhost:8000/boards/ 처럼 page값 없이 호출된 경우에는 디폴트로 1이라는 값을 설정한다
그리고 Paginator 클래스를 다음처럼 사용했다.
paginator = Paginator(question_list, 10) # 페이지당 10개씩 보여 주기

templates\boards\post_list.html
{% extends 'layout/base.html' %}
{% block content %}
<div class="container my-3">
<table class="table">
<thead>
<tr class="table-dark">
<th>번호</th>
<th>제목</th>
<th>작성일시</th>
</tr>
</thead>
<tbody>
{% if post_list %}
{% for post in post_list %}
<tr>
<td>{{post.id}}</td>
<td>
<a href="{% url 'boards:detail' post.id %}">{{ post.title }}</a>
</td>
<td>{{ post.created_at }}</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="3">게시글이 없습니다</td>
</tr>
{% endif %}
</tbody>
</table>
<!-- 페이징처리 시작 -->
<ul class="pagination justify-content-center">
<!-- 이전페이지 -->
{% if post_list.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ post_list.previous_page_number }}">이전</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" tabindex="-1" aria-disabled="true" href="#">이전</a>
</li>
{% endif %}
<!-- 페이지리스트 -->
{% for page_number in post_list.paginator.page_range %}
{% if page_number == post_list.number %}
<li class="page-item active" aria-current="page">
<a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a>
</li>
{% endif %}
{% endfor %}
<!-- 다음페이지 -->
{% if post_list.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ post_list.next_page_number }}">다음</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" tabindex="-1" aria-disabled="true" href="#">다음</a>
</li>
{% endif %}
</ul>
<!-- 페이징처리 끝 -->
<a href="{% url 'boards:post_create' %}" class="btn btn-primary">글 등록하기</a>
</div>
{% endblock %}

templates\boards\post_list.html
페이징 처리는 잘 되었지만 한 가지 문제를 발견할 수 있다. 문제는 위에서 보듯이 이동할 수 있는 페이지가 모두 표시된다는 점이다.
이 문제를 해결하기 위해 다음과 같이 템플릿을 수정하자.
{% for page_number in post_list.paginator.page_range %}
{% if page_number >= post_list.number | add : -5 and page_number <= post_list.number | add : 5 %}
{% if page_number == post_list.number %}
<li class="page-item active" aria-current="page">
<a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a>
</li>
{% endif %}
{% endif %}
{% endfor %}
