目录
分页就是把很多的内容分成多页让用户选择预览,比如说百度的这里就是分页功能

有两个优点
在django中可以使用django.core.paginator来方便的使用分页功能
页码可以直接放在路由里面(比如 /test_page/4 ,这种就是第四页),也可以放在查询字符串作为参数传递(比如 /test_page?page=4)
一般会使用查询字符串的形式,少一些路由会方便一些
首先我们先搞一个视图

首先导入django.core.paginator中的Paginator,之后进入视图,视图中的代码的意思依次是
再搞一个路由

最后编写test_page.html

用了很多的方法与属性,我们先看效果,后面再讲
打开后是这样的

点击下一页

再点击下一页

点击上一页

点击链接1

发现符合我们使用的基本要求
分页器对象负责分页数据整体的管理,使用django.core.paginator中的构造函数Paginator实例化对象,Paginator有两个阐述,第一个参数是所有要分页的数据,第二个参数是每页显示多少个数据

有四个常用属性
我们在模板层中使用到了page_range属性,用page_range做出了页数索引

page对象是描述当前页信息的对象
使用paginator对象的page()方法创建,参数为执行的页码索引(从1开始)

InvalidPage异常是一个大类,包含下面两个异常子类
当传入不是一个整数值的时候,会出现PageNotAnInteger异常,这个异常基本不会出现,因为我们获取当前页信息的时候都会int()一下,取而代之是这种错误

如果拿到的页数是无效值,比如你只分了三页,你给非[1,2,3]的值,就会抛出EmptyPage的错误

我们在例子中使用到了number属性来判断get拿到的page信息,是否是当前页,如果是当前页,那么拿到的page就不会是一个链接,而是一个文字

我们在例子中,用到了has_next(),has_previous(),previous_page_number()和next_page_number()

视图已经分析过了,我们现在来看test_page.html
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Titletitle>
- head>
- <body>
- {% for content in current_page %}
- <p>
- {{ content }}
- p>
- {% endfor %}
- {% if current_page.has_previous %}
- <a href="/test_page?page={{ current_page.previous_page_number }}">上一页a>
- {% endif %}
- {% for current_page_num in paginator.page_range %}
- {% if current_page_num == current_page.number %}
- {{ current_page_num }}
- {% else %}
- <a href="/test_page?page={{ current_page_num }}">{{ current_page_num }}a>
- {% endif %}
- {% endfor %}
- {% if current_page.has_next %}
- <a href="/test_page?page={{ current_page.next_page_number }}">下一页a>
- {% endif %}
- body>
- html>
只需要将这里换成查询数据的语句就可以了

之后我们就可以拿到数据了


可以根据字段拿到指定的数据,比如我现在要使用名字

这里就会显示名字了
