一、Paginator对象
- 创建对象 格式:Paginator(列表, 整数) 返回值:返回的分页对象
- 属性 count:对象总数 num_pages:页面总数 page_range: [1,2,3,4,5] 页码从1开始
- 方法 page(num) :获得一个Page对象,如果提供的页码不存在会抛出"InvalidPage"异常
- 异常
- InvalidPage:当向page()传递的是一个无效的页码时抛出
- PageNotAnInteger:当向page()传递的不是一个整数时抛出
- EmptyPage:当向page()传递一个有效值,但是该页面时没有数据时抛出
二、Page对象
- 创建对象 Paginator对象的page()方法返回得到Page对象(不需要手动创建)
- 属性
- object_list:当前页上所有的数据(对象)列表
- number:当前页的页码值
- paginator:当前page对象关联的paginator对象
- 方法
- has_next: 判断是否有下一页,如果有返回True
- has_previous:判断是否有上一页,如果有返回True
- has_other_pages:判断是否有上一页或下一页,如果有返回True
- next_page_number:返回下s一页的页码,如果下一页不存在抛出InvalidPage异常
- previous_page_number:返回上一页的页码,如果上一页不存在抛出InvalidPage异常
- len():返回当前页的数据(对象)个数
三、示例
路由配置
代码语言:javascript复制path(<span class="hljs-string">r'^stupage/<int:nowPage>/$'</span>,views.stuPage,name=<span class="hljs-string">'page'</span>),
视图
代码语言:javascript复制<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">stuPage</span><span class="hljs-params">(req,nowPage)</span>:</span>
allStu = Students.stuObj.all()
pag = Paginator(allStu,<span class="hljs-number">6</span>)
<span class="hljs-keyword">if</span> int(nowPage)>=int(pag.num_pages):
nowPage = pag.num_pages
<span class="hljs-keyword">try</span>:
page = pag.page(nowPage)
<span class="hljs-keyword">except</span>:
page = pag.page(pag.num_pages)
<span class="hljs-comment"># print(page)</span>
<span class="hljs-keyword">return</span> render(request,<span class="hljs-string">'studentPage.html'</span>,{<span class="hljs-string">'students'</span>:page})
模板
代码语言:javascript复制<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
展示分页的数据
{% for i in data.object_list %}
<p>{{ i.username }}</p>
{% endfor %}
展示分页的页码
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="{% url 'App:showPage' %}?page=1" aria-label="Next">
<span aria-hidden="true">首页</span>
</a>
</li>
<li {% if not data.has_previous %}class="disabled"{% endif %}>
<a {% if data.has_previous %}
href="{% url 'App:showPage' %}?page={{ data.previous_page_number }}"
{% endif %} aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% for index in data.paginator.page_range %}
<li {% if index == data.number %}class="active"{% endif %}><a href="{% url 'App:showPage' %}?page={{ index }}">{{ index }}</a></li>
{% endfor %}
<li {% if not data.has_next %}class="disabled"{% endif %}>
<a {% if data.has_next %}
href="{% url 'App:showPage' %}?page={{ data.next_page_number }}"
{% endif %} aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
<li {% if not data.paginator.num_pages %}class="disabled"{% endif %}>
<a {% if data.paginator.num_pages %}
href="{% url 'App:showPage' %}?page={{ data.paginator.num_pages }}"
{% endif %} aria-label="Next">
<span aria-hidden="true">尾页</span>
</a>
</li>
</ul>
</nav>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>