想要給頁面做分頁效果,并在每頁數(shù)據(jù)末尾設(shè)置上一頁地梨、下一頁的跳轉(zhuǎn)鏈接菊卷,這在DJango中需要用到paginator方法。
1.paginator(參數(shù)1, 參數(shù)2)
第一個參數(shù):所有數(shù)據(jù)宝剖;
第二個參數(shù):每頁顯示的條數(shù)洁闰。
如下:所有學(xué)生按照每頁3條的形式分頁
stus = Student.objects.all()
paginator = Paginator(stus, 3)
paginator對象的屬性:
a.page(number)
獲取某一頁的數(shù)據(jù),page和paginator可相互調(diào)用
# 獲取第1頁的內(nèi)容
page = paginator.page(1)
b.num_pages
頁碼總數(shù)
c.page_range
頁碼列表[1, 2, 3, 4, 5]万细,可以通過遍歷取出列表中的頁碼數(shù)
d.count
對數(shù)據(jù)個數(shù)求和
page
如下取paginatord的第一頁為page
page = paginator.page(1)
page對象的屬性:
a.has_next
是否存在上一頁
b.has_previous
是否存在下一頁
c.next_page_number
下一頁頁數(shù)
d.previous_page_number
上一頁頁數(shù)
e.number
當(dāng)前頁數(shù)
實例
獲取全部學(xué)生的信息扑眉,每頁只顯示3條數(shù)據(jù)
a.views頁面
def stuPage(request):
if request.method == 'GET':
# get如果沒有獲取到第一個參數(shù),會自動獲取第二個參數(shù)
page_id = request.GET.get('page_id', 1)
stus = Student.objects.all()
# 分頁顯示赖钞,把stus 的數(shù)據(jù)按照3個一頁顯示
paginator = Paginator(stus, 3)
# 獲取第一頁的內(nèi)容
page = paginator.page(page_id)
return render(request, 'index_page.html', {'page': page})
b.html頁面
{% for i in page %}
姓名: {{ i.s_name }}
電話: {{ i.s_tel }}
地址: {{ i.studentinfo.i_addr }}
頭像:
{% if i.studentinfo.i_image %}
<img src="/media/{{ i.studentinfo.i_image }}" width="100px" height="100px">
{% endif %}
<br>
{% empty %}
暫時沒有學(xué)生信息
<br>
{% endfor %}
{#通過page可以找到paginator#}
<h4>一共{{ page.paginator.num_pages }}頁/一共{{ page.paginator.count }}條數(shù)據(jù)</h4>
{% if page.has_previous %}
<a href="/stuapp/stupage/?page_id={{ page.previous_page_number }}">上一頁</a>
{% endif %}
<h5>
{% for x in page.paginator.page_range %}
<a href="/stuapp/stupage/?page_id={{ x }}">{{ x }}</a>
{% endfor %}
</h5>
當(dāng)前第{{ page.number }}頁
{% if page.has_next %}
<a href="/stuapp/stupage/?page_id={{ page.next_page_number }}">下一頁</a>
{% endif %}