###文章僅供學習使用,有問題歡迎指出
最近一直在想如何去為自己的部落格網站分頁,很高興的是Django自帶一個分頁的系統
他叫Pagination
官方文件
https://docs.djangoproject.com/zh-hans/2.0/topics/pagination/
Paginaion的應用
在使用Pagination時我們要從Django的包中引入
From django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
以下內容截自官方文件
>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)
複製程式碼
通過objects.get.all()我們可以獲取所用的資料,這時我們建立一個Paginator的實力,並對他進行分類
def __init__(self, object_list, per_page, orphans=0,
allow_empty_first_page=True):
self.object_list = object_list
self._check_object_list_is_ordered()
self.per_page = int(per_page)
self.orphans = int(orphans)
self.allow_empty_first_page = allow_empty_first_page
複製程式碼
內建原始碼 object_list是你的列表即資料,per_page按多少分為一頁,all_empty_first_page 是否允許第一頁為空,滿足時報錯。當我們讀取不到任何資料的時候,達到滿足條件
>>> p.count
4
>>> p.num_pages
2
>>> type(p.page_range)
<class 'range_iterator'>
>>> p.page_range
range(1, 3)
複製程式碼
p.count 可分類的資料數量,即['john', 'paul', 'george', 'ringo']
p.num_page 分類之後的頁數
>>> page1 = p.page(1)
>>> page1
<Page 1 of 2>
>>> page1.object_list
['john', 'paul']
複製程式碼
page1 = p.page(1) 此時page1表示第一條資料和第二條資料
同理
page2 =p.page(2)
此時page2表示3.4兩行資料
是否具有下一頁page1.has_next()
是否具有上一頁page1.has_previous()
是否還有其它的頁 Page1.has_other_pages()
下一頁的頁碼 Page.nex_page_number()
上一頁的頁碼 page2.previous_page_number()
當前頁最開始的時第幾條資料page2.start_index()
當前頁最後結束的時第幾條資料 page2.end_index()
p.page(0) 當前頁的第0條資料 EmptyPage: That page number is less than 1
p.page(3)當前頁的第三條資料 EmptyPage: That page contains no results
View檢視的編寫
#1.獲取資料
stu_list = Student.objects.all() `
#2.分類
pagintor = Pagintor(stu_list,5)`
#3.獲取頁面,並且轉換
page = request.GET.get('page')
stus = paginator.get_page(page)
#4.返回
return render(request, 'list.html', {'stu': stu})
複製程式碼
{% for stu in stus %}
...
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if contacts.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ stu.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ stu.number }} of {{ stu.paginator.num_pages }}.
</span>
{% if contacts.has_next %}
<a href="?page={{ stu.next_page_number }}">next</a>
<a href="?page={{ stu.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
複製程式碼
更加完善的分頁系統