반응형

<home.html> 의 블로그 글들 페이지네이션 하고 싶을 때 -> 방법은 많음


요약하자면

1.무슨 객체를 , 한 페이지 당 몇개씩 실을 것인지 결정 -> Paginator(object, num)

2.내가 원하는 페이지 갖고 오기                     -> 페이지네이터객체.get_page(갖고오고싶은 페이지번호)

3.갖고 온 페이지 html에 띄우기                     -> 페이지객체의 매소드함수 + template언어


#page 객체의 메소드 함수

-page.count() : 총 객체 수(총 블로그 글 개수)

-page.num_pages() : 총 페이지 개수

-page.page(n)  : n번째 페이지 리턴

-page.page_range() :(1부터 시작하는) 페이지 리스트 반환

-page.get_page(n) :n번째 페이지 갖고 오기

-page.has_next() : 다음페이지 있으면 true/ 없으면 false

-page.has_previous() : 이전 페이지 있으면 true/없으면 false

-page.previous_page_number() : 이전 페이지 번호 반환


1.blog app /views.py -> home.html이 있는 app에서 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django.core.paginator import Paginator
 
def home(request):
    blogs = Blog.objects
    # 블로그 모든 글을 대상으로
    blog_list = Blog.objects.all()
    # 블로그 객체 세 개를 한 페이지로 자르기
    paginator = Paginator(blog_list, 3)
    # request된 페이지가 뭔지 알아내고 (request 페이지를 변수에 담아내고)
    page = request.GET.get('page')
    # request된 페이지를 얻어온 뒤 return 해준다
    posts = paginator.get_page(page)
    return render(request, 'blog/home.html', {'blogs': blogs, 'posts':posts})
 
cs


## 갑자기 한글 파일 깨짐 그럴 때는 base.html 에

1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
cs


2.home.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
{% extends 'base.html' %}
 
 
{% block content%}
 
{% for blog in posts %}
<div style="margin:30px auto 30px auto; display: block" class="container" >
    <div class="card">
    <div class="card-body">
    <h5 class="card-title">{{blog.title}}</h5>
    <h6 class="card-subtitle mb-2 text-muted">{{ blog.pub_date}}</h6>
    <class="card-text">{{blog.summary}}</p>
    <a href="{% url 'detail' blog.id %}" class="card-link">..more</a>
    </div>
    </div>
</div>
{% endfor %}
 
{#First Previews 3of4 Next Last#}
 
{#first previous#}
{% if posts.has_previous%}
<a href="?page=1">First</a>
<a href="?page={{posts.previous_page_number}}">Previous</a>
{% endif %}
{#3of4#}
<span>{{posts.number}}</span>
<span>of</span>
<span>{{posts.paginator.num_pages}}</span>
{#Next Last#}
{% if posts.has_next%}
<a href="?page={{posts.next_page_number}}">Next</a>
<a href="?page={{posts.paginator.num_pages}}">Last</a>
{% endif %}
{% endblock %}
 
cs


##container가 전부를 감싸는 오류 생김 -> div어디 감싸는지 endblock 어디에 넣어주는 지 잘 보쟈

반응형

'Web > Django' 카테고리의 다른 글

[6주차]Form  (0) 2019.03.06
[5.5주차]Faker  (0) 2019.03.05
[5주차]1.로그인,회원가입  (0) 2019.03.05
[4주차]2.blog-(3)  (0) 2019.03.05
[4주차]2.blog-(2)  (0) 2019.03.04

+ Recent posts