django 內建分頁功能
阿新 • • 發佈:2018-12-20
匯入分頁的包
from django.core.paginator import Paginator
1.類方法
- Page.has_next() 如果有下一頁,則返回True。
- Page.has_previous() 如果有上一頁,返回 True。
- Page.has_other_pages() 如果有上一頁或下一頁,返回True。
- Page.next_page_number() 返回下一頁的頁碼。如果下一頁不存在,丟擲InvlidPage異常。
- Page.previous_page_number() 返回上一頁的頁碼。如果上一頁不存在,丟擲InvalidPage異常。
- Page.start_index() 返回當前頁上的第一個物件,相對於分頁列表的所有物件的序號,從1開始。比如,將五個物件的列表分為每頁兩個物件,第二頁的start_index()會返回3。
- Page.end_index() 返回當前頁上的最後一個物件,相對於分頁列表的所有物件的序號,從1開始。 比如,將五個物件的列表分為每頁兩個物件,第二頁的end_index() 會返回 4。
2.類屬型
- Page.object_list 當前頁上所有物件的列表。
- Page.number 當前頁的序號,從1開始。
- Page.paginator 相關的Paginator物件。
分頁例子:
from django.shortcuts import render,HttpResponse from .models import User from django.core.paginator import Paginator def users(req): cur_page = req.GET.get("cur_page") res = User.objects.all() paginator = Paginator(res,10)#每頁顯示十個 user_list = paginator.page(cur_page)#顯示當前頁的內容 return render(req,"login.html",{"user_list":user_list})
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>人員名單</h2>
<ul>
{% for item in user_list.object_list %}
<li>{{ item.username }}</li>
{% endfor %}
</ul>
<div>
#上一頁按鈕
{% if user_list.has_previous %}
<a href="?cur_page={{ user_list.previous_page_number }}">上一頁</a>
{% endif %}
#頁碼顯示
{% for item in user_list.paginator.page_range %}
{% if item == user_list.number %}
<a href="?cur_page={{ item }}" style="display: inline-block;color: red;background-color: mediumblue" >{{ item }}</a>
{% else%}
<a href="?cur_page={{ item }}">{{ item }}</a>
{% endif %}
{% endfor %}
#下一頁按鈕
{% if user_list.has_next %}
<a href="?cur_page={{ user_list.next_page_number }}">下一頁</a>
{% endif %}
</div>
</body>
</html>