[django] python django 게시판 만들기 - Pagination
홈에 나오는 게시물들을 자른다!
model, admin 설정 : https://integer-ji.tistory.com/89
views에 데이터 가져오기 : https://integer-ji.tistory.com/90
detail page 만들기 : https://integer-ji.tistory.com/91
setting 설정, 데이터 자르기, 정렬하기 : https://integer-ji.tistory.com/93
getbootstrap으로 홈페이지 꾸미기 : https://integer-ji.tistory.com/94
템플릿 상속, url 관리하기 : https://integer-ji.tistory.com/95
디자인 쪼끔 수정 : https://integer-ji.tistory.com/97
글 쓰기 기능 만들기 : https://integer-ji.tistory.com/99
글 수정 기능 만들기 : https://integer-ji.tistory.com/100
글 삭제 기능 만들기 : https://integer-ji.tistory.com/101
form 이용하기, 글 수정 instance 가져오기 : https://integer-ji.tistory.com/102
home 함수 수정
from django.core.paginator import Paginator
def home(request):
blogs = Blog.objects.order_by('-id')
blog_list = Blog.objects.all().order_by('-id')
paginator = Paginator(blog_list,3)
page = request.GET.get('page')
posts = paginator.get_page(page)
return render(request,'home.html', {'blogs':blogs,'posts':posts} )
paginator을 import 해줍니다.
home 함수를 변경할 건데 지금은 그냥 Blog의 객체 전부를 홈에 나타내 줍니다.
블로그 객체들을 blog_list에 새로 담고 paginator이란 변수에 Paginator를 이용해 3개씩 자른 blog_list를 넣어줍니다.
잘린 3개씩 들어있는 blog_list를 page에 넣어줍니다.
page를 출력하기 위해 posts에 넣어줍니다.
home.html 수정
{% extends 'base.html' %}
{% block content %}
{% for blog in posts %}
<div class="container">
<div class="card">
<div class="card-body">
<h1>{{ blog.title }}</h1>
<p>{{ blog.pub_date | date:"Y-m-d" }}</p>
<p>{{ blog.summary }}<a href="{% url 'detail' blog.id %}"> ...자세히 보기</a></p>
</div>
</div>
</div>
<br>
{% endfor %}
{%if posts.has_previous%}
<a href="?page=1">First</a>
<a href="?page={{posts.previous_page_number}}">Previous</a>
{%endif%}
<span>{{posts.number}}</span>
<span>of</span>
<span>{{posts.paginator.num_pages}}</span>
{%if posts.has_next%}
<a href="?page={{posts.next_page_number}}">Next</a>
<a href="?page={{posts.paginator.num_pages}}">Last</a>
{%endif%}
{% endblock %}
for blog in posts가 수정되었습니다.
블로그에 있는 모든 글을 가져오는 것이 아니라
3개로 잘린 page를 가져와야 합니다. posts로 변경
post.has_previous가 추가되었습니다.
만약 이전 페이지가 존재하지 않으면 나 타지 않습니다.
그리고 현재 페이지 번호와 총페이지를 나타내 줍니다.
다음은 다음 페이지를 나타내 줍니다. 마찬가지로 다음 페이지가 없으면 출력되지 않습니다.
확인
첫 페이지는 이전으로 갈 페이지가 없으니 if문이 실행되지 않습니다.
12페이지 중 2번째 페이지입니다.
마지막 페이지도 무사히 나옵니다.
git push
git init
git add .
git commit -m "코멘트"
git push origin master
---
빠르게 프로젝트에 진입하기 위해 진도부터 확 빼기
'코딩공부 > Python Django' 카테고리의 다른 글
django static 파일 설정 (0) | 2020.02.29 |
---|---|
django q객체를 이용한 검색기능 만들기 (2) | 2020.02.27 |
[django 실습] 게시판 만들기 - form 이용하기, 글 수정 instance 가져오기 (4) | 2020.02.24 |
[django 실습] 게시판 만들기 - 글 삭제 기능 만들기 (3) | 2020.02.23 |
[django 실습]게시판 만들기 - 글 수정 기능 만들기 (2) | 2020.02.22 |