Django提供了分页的工具,存在于django.core中
from django.core.paginator import Paginator
Paginator:
对象创建: Paginator(数据集,每一页数据数)
属性:
count 对象总数
num_pages : 页面总数
page_range:页码列表,从1开始
object_list: 当前页面上所有的数据对象
number:当前也的页码值
paginator:当前page关联的Paginator对象
方法: page(整数):获取一个page对象
Page : 对象获得,通过Paginator的page()方法获得
has_next() :判断是否有下一页
has_previous():判断是否有上一页
has_other_pages():判断是否有上一页或下一页
next_page_number():返回下一页的页码
previous_page_number():返回上一页的页码
len():返回当前页的数据的个数
后端
from django.core.paginator import Paginator
from django.http import HttpResponse
from django.shortcuts import render
from dj05app.models import MyUser
# Create your views here.
USER_PEER_PAGE_NUM = 5
def get_user_by_num(req, page_num):
page_num = int(page_num)
# 获取全部用户
users = MyUser.objects.all()
# 创建分页
paginator = Paginator(
users,
USER_PEER_PAGE_NUM
)
# 参数校验
if page_num <= 0 or page_num > paginator.num_pages:
return HttpResponse("没数据了")
# 拿到用户指定页面的那页数据
page = paginator.page(page_num)
data = {
'users': page.object_list
}
return render(req, 'users.html', data)
前端
<ul>
{% for i in users %}
<li>{{ i.username }}</li>
{% endfor %}
</ul>
urls
from django.conf.urls import url
from .views import get_user_by_num
urlpatterns = [
url(r'^user/(\d+)', get_user_by_num)
]