Django-paginator 모듈을 사용한 페이지 나누기
다음 예에서는 django 공식 문서를 참조합니다.https://docs.djangoproject.com/en/1.11/topics/pagination/
Paginator 클래스 사용
Paginator 실례화는 두 개의 인자가 필요합니다. 하나는 페이지를 나누려는 대상list (count 방법이나 len 방법을 실현해야 함) 이고, 다른 하나는 페이지당 수량입니다.Paginator 객체 속성:
count
num_pages
page_range
>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)
>>> p.count
4
>>> p.num_pages
2
>>> type(p.page_range)
<class 'range_iterator'>
>>> p.page_range
range(1, 3)
Paginator 객체의 중요한 방법인 페이지 () 는 페이지 번호를 매개 변수로 받아들여 현재 페이지 대상을 되돌려줍니다.객체의 등록 정보 및 방법:
object_list
has_next()
has_ previous()
has_other_pages()
next_page_number()
previous_page_number()
start_index() , , 1
end_index() , , 1
paginator Paginator
>>> page1 = p.page(1)
>>> page1
>>> page1.object_list
['john', 'paul']
>>> page2 = p.page(2)
>>> page2.object_list
['george', 'ringo']
>>> page2.has_next()
False
>>> page2.has_previous()
True
>>> page2.has_other_pages()
True
>>> page2.next_page_number()
Traceback (most recent call last):
...
EmptyPage: That page contains no results
>>> page2.previous_page_number()
1
>>> page2.start_index() # The 1-based index of the first item on this page
3
>>> page2.end_index() # The 1-based index of the last item on this page
4
Pagenator의 페이지 방법은 페이지 번호가 없는 범위 밖의 값을 전달하면 EmptyPage의 이상을 받습니다.
>>> p.page(0)
Traceback (most recent call last):
...
EmptyPage: That page number is less than 1
>>> p.page(3)
Traceback (most recent call last):
...
EmptyPage: That page contains no results
뷰에서는 다음과 같이 사용할 수 있습니다.
# views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # 25
page = request.GET.get('page') #
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# ,
contacts = paginator.page(1)
except EmptyPage:
# ,
contacts = paginator.page(paginator.num_pages)
return render(request, 'list.html', {'contacts': contacts})
contacts 대상은 페이지 정보가 있는QuerySet을 사용하여 템플릿을 렌더링합니다:list.html
{% for contact in contacts %}
{# Each "contact" is a Contact model object. #}
{{ contact.full_name|upper }}
...
{% endfor %}
class="pagination">
class="step-links">
{% if contacts.has_previous %}
"?page={{ contacts.previous_page_number }}">previous
{% endif %}
class="current">
Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
{% if contacts.has_next %}
"?page={{ contacts.next_page_number }}">next
{% endif %}
모델 클래스에 기반한 보기,paginateby 값을 부여하면 됩니다. 더 간단할 것 같습니다.
class BookListView(generic.ListView):
model = Book
context_object_name = 'book_list'
template_name = 'catalog/book_list.html'
paginate_by = 10
템플릿은 통용입니다. 템플릿에서 is 를 호출할 수 있습니다.paginated에서 페이지 정보가 있는지 판단합니다.페이지 사용 중obj 대상 페이지 나누기 실현.
{% block pagination %}
{% if is_paginated %}
class="pagination">
class="pagelinks">
{% if page_obj.has_previous %}
"{{ request.path }}?page={{ page_obj.previous_page_number }}">previous
{% endif %}
class="page-current">
Page{{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
{% if page_obj.has_next %}
"{{ request.path }}?page={{ page_obj.next_page_number }}">next
{% endif %}
{% endif %}
{% endblock %}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.