分页
分页库Paginator的基本语法
django提供了分页的工具,存在于django.core中
Paginator: 数据分页工具
Page:具体的某一页
Paginator:
对象创建: Paginator(数据集,每一页数据)
属性:
count 计算和
num_pages: 页面总和
page_range: 页码列表,从1开始
方法:
page(页码):获取的一个page对象,页码不存在则抛出invalidPage的异常
常见错误
invalidPage:page()传递无效页码
PageNotAnInteger:Page()传递的不是整数
Empty:page()传递的值有效,但是没有数据
page对象
page:
对象获取,通过Paginator的page()方法获得
属性:
object_list: 当前页面上所有的数据对象
number: 当前页的页码值
paginator: 当前page关联的Paginator对象
方法:
has_next() 判断是否有下一页
has_previous(): 判断是否有上一页
has_other_pages(): 判断是否有上一页或下一页
next_page_number(); 返回下一页的页码
previous_page_number(): 返回上一页的页码
len(): 返回当前也的数据的个数
Paginator对象和Page对象的关系
如下有学生表,学生表中有25条数据,通过分页,每一个6条数据,去实现分页的功能
实例
视图函数中的使用
from django.core.paginator import Paginator
def users(request):
if request.method == 'GET':
# 使用切片完成分页功能
# sql:offset limit,select * from users offset 3 limit 3
page_number = int(request.GET.get('page', 1))
# users = Users.objects.all()[3 * (page_number - 1):3 * page_number]
users = Users.objects.all()
# 使用Paginator分页
paginator = Paginator(users, 3)
# 获取某一页的信息
page = paginator.page(page_number)
return render(request, 'users.html', {'page': page})
模板中的使用使用
{% extends 'base.html' %}
{% block title %}
用户管理界面
{% endblock %}
{% block content %}
<P>已有账号</P>
<table>
<thead>
<th>id</th>
<th>用户名</th>
<th>创建时间</th>
</thead>
<tbody>
{% for u in page %}
<tr>
<td>{{ u.id }}</td>
<td>{{ u.username }}</td>
<td>{{ u.create_time | date:'Y-m-d' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p>当前页:{{ page.number }}</p>
<p>页码:
{% for i in page.paginator.page_range %}
<a href="{% url 'users:users' %}?page={{i}}">{{i}}</a>
{% endfor %}
</p>
<p>
{% if page.has_previous %}
<a href="{% url 'users:users' %}?page={{ page.previous_page_number}}">上一页</a>
{% endif %}
{% if page.has_next %}
<a href="{% url 'users:users' %}?page={{ page.next_page_number}}">下一页</a>
{% endif %}
</p>
{% endblock %}