django提供了分页的工具,存在于django.core中
Paginator : 数据分页工具
Page : 具体的某一页面
Paginator
对象创建
Paginator(数据集,每一页数据数)
属性
- count: 对象总数
- num_pages: 页面总数
- page_range: 页码列表,从1开始
方法
page(整数): 获得一个page对象
常见错误
- InvalidPage:page() 传递无效页码
- PageNotAnInteger:page() 传递的不是整数
- Empty:page() 传递的值有效,但是没有数据
Page
对象获得,通过Paginator的page()方法获得
属性
- object_list: 当前页面上所有的数据对象
- number: 当前页的页码值
- paginator: 当前page关联的Paginator对象
方法
- has_next() :判断是否有下一页
- has_previous():判断是否有上一页
- has_other_pages():判断是否有上一页或下一页
- next_page_number():返回下一页的页码
- previous_page_number():返回上一页的页码
- len():返回当前页的数据的个数

实例
1 2 3 4 5 6 7 8 9 10 11
| def get_students.with_page( request): page = int(request.GET.get("page", 1)) per_page =int(request.GET.get("per. page", 10)) students = Student.objects.all() paginator = Paginator(students, per_page) page_object = paginator.page(page) data = { "page_object": page_object } return render( request, ' students_with_page.html',context=data)
|
一个带分页界面的模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>StudentsWithPage</title> <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"> <script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.11.1/jquery.js"></script> <script type="text/javascript" src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.js"></script>
</head> <body>
<ul> {% for student in page_object.object_list %} <li>{{ student.s_name }}</li> {% endfor %}
</ul>
<nav aria-label="Page navigation"> <ul class="pagination"> {% if page_object.has_previous %} <li> <a href="{% url 'app:get_students_with_page' %}?page={{ page_object.previous_page_number }}" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> {% else %} <li class="disabled"> <a href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li>
{% endif %}
{% for page_index in page_range %} {% ifequal page_index page_object.number %} <li class="active"><a href="{% url 'app:get_students_with_page' %}?page={{ page_index }}">{{ page_index }}</a></li> {% else %} <li><a href="{% url 'app:get_students_with_page' %}?page={{ page_index }}">{{ page_index }}</a></li> {% endifequal %}
{% endfor %}
{% if page_object.has_next %} <li> <a href="{% url 'app:get_students_with_page' %}?page={{ page_object.next_page_number }}" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> {% else %} <li class="disabled"> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> {% endif %}
</ul> </nav>
</body> </html>
|
思维导图
