一、前言

  真的是挺久没有更新网站搭建了,因为最近在学习网络爬虫,又忙着考驾照,每一天都要练车,所以能利用的时间就只有晚上了。话不多说,直接开始了解Django的分页器吧,其实分页器的功能挺强大的,可以通过导入Paginator对象来实现文章的分页,列表的分页,还有上一页和下一页的功能。最好是参考Django的官方文档:分页|Django文档,也可以参考之前写的Django入门: (第十天) 分页器的使用,下面简单的写个例子吧。

>>> from django.core.paginator import Paginator # 导入Paginator模块
>>> list1=[i for i in range(0,150)] # 使用列表生成器生成一个包含150个数字的列表
>>> page1=Paginator(list1,10) # 生成一个Paginator对象
>>> print(page1.count) # 打印总的记录数,即列表list1的长度
150
>>> print(page1.num_pages) # 打印总的页数,即总记录数除以每页显示的条目数
15
>>> print(page1.page_range) # 页数的列表
range(1, 16)
>>> print(page1.page(1)) # 打印第一页的page对象
<Page 1 of 15>
>>> page1.page(1).object_list # 打印第一页的所有记录
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> page1.page(2).object_list # 打印第二页的所有记录
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> page1.page(2).next_page_number() # 打印当前的页(第2页)的下一页的页码
3
>>> page1.page(2).has_next() # 第2页是否有下一页
True
>>> page1.page(2).has_previous() # 第2页是否有上一页
True
>>> page1.page(2).has_other_pages() # 第2是否有其他页
True
>>> page1.page(2).start_index() # 第2页第一条记录的序号
11
>>> page1.page(2).end_index() # 第2页最后一条记录的序号
20
>>> page1.page(0) # 第0页是否有记录,会报错
Traceback (most recent call last):File "<stdin>", line 1, in <module>...raise EmptyPage(_('That page number is less than 1'))
django.core.paginator.EmptyPage: <exception str() failed>
>>> page1.page(15) # 打印第15页的对象
<Page 15 of 15>

二、代码展示

1.后端分页功能代码

from django.core.paginator import Paginator #导入Paginator模块# 创建一个分页器对象,参数分别是文章列表,每页最大文章数量
# 这里的EACH_RAGE_BLOG_NUMBER等于10,已经当成常量写进了seetings里
paginator = Paginator(post_all_list, settings.EACH_RAGE_BLOG_NUMBER)# 采用get方式获取用户访问的页码,如果获取不到,默认为第一页
page_num = request.GET.get('page', 1)# 因为用户输入不一定是数字,所以需要用int(page_num),而django里的get_page会自动识别用户输入以及页码范围
# 注意这里的page_of_list是一个paginator对象
page_of_list = paginator.page(int(page_num))# 获取当前页码
current_page_num = page_of_list.number# 获取当前页码前后各两页的页码范围
# 需要注意判断的是:如果当前页是第一页,那么前两页不能是0,也不能是-1,所以要使用内置max函数来与1比较最大值
# 同理:如果当前页已经是最后一页,那么就不能取到当前页+2的页码了,所以要使用内置min函数来与最大页码比较最小值
page_range = list(range(max(current_page_num - 2, 1), current_page_num)) + \list(range(current_page_num, min(current_page_num + 2, paginator.num_pages) + 1))# 加上省略页码标记
# paginator.num_pages表示一共有多少页码
if page_range[0] - 1 >= 2:page_range.insert(0, '...')
if paginator.num_pages - page_range[-1] >= 2:page_range.append('...')# 加上首页尾页
# paginator.num_pages表示一共有多少页码
if page_range[0] != 1:page_range.insert(0, 1)
if page_range[-1] != paginator.num_pages:page_range.append(paginator.num_pages)

2.前端代码

<div class="paginator"><ul class="pagination"><li>{# 上一页 #}{% if page_of_list.has_previous %}<a href="?page={{ page_of_list.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a>{% else %}<span aria-hidden="true">«</span>{% endif %}</li>{# 全部页码 #}{# {% for page_num in page_of_list.paginator.page_range %}#}{# page_range在views中被处理成当前页数+-2的范围,目的是为了避免页码过于长#}{% for page_num in page_range %}{# 判断是否当前页 #}{% if page_num == page_of_list.number %}{# 如果是当前页就设置active高亮 #}<li class="active"><a href="?page={{ page_num }}">{{ page_num }}</a></li>{% else %}{% if page_num == '...' %}<li><span>{{ page_num }}</span></li>{% else %}<li><a href="?page={{ page_num }}">{{ page_num }}</a></li>{% endif %}{% endif %}{% endfor %}<li>{# 下一页 #}{% if page_of_list.has_next %}<a href="?page={{ page_of_list.next_page_number }}" aria-label="Previous"><span aria-hidden="true">下一页</span></a>{% else %}<span aria-hidden="true">»</span></li>{% endif %}</ul><p>共有{{ page_of_list.paginator.count }}篇博客,当前第{{ page_of_list.number }}页, 共{{ page_of_list.paginator.num_pages }}页</p>
</div>

  原文出处:https://jzfblog.com/detail/42,文章的更新编辑以此链接为准。欢迎关注源站文章!

转载于:https://www.cnblogs.com/djcoder/p/10726118.html

网站搭建 (第03天) 分页功能相关推荐

  1. 斗鱼做直播已经年收益突破40亿:一对一在线直播程序源码、直播网站搭建就找布谷科技...

    斗鱼做直播已经年收益突破40亿:一对一在线直播程序源码.直播网站搭建就找布谷科技 据相关部门报道在3月25日斗鱼单靠直播现在年收益已经突破40亿了,游戏直播在线直播程序源码依旧是名列前茅的,占据的市场 ...

  2. [个人网站搭建]·Django增加评论功能(Python3)

    [个人网站搭建]·Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/ ...

  3. 补单系统平台开发补单网站搭建源码部署(TB+PDD+验号功能)

    补单系统平台开发补单网站搭建源码部署(TB+PDD+验号功能) 现在的电商平台竞争可以说是非常的激烈,不管你是在淘宝.京东.拼多多.还是在阿里巴巴,这些平台的商品信息已经是非常的丰富了.你想单纯的靠传 ...

  4. 自定义html托管,10分钟搞定“傻瓜式”的静态网站搭建托管之旅

    原文发布于微信公众号:腾讯云存储(关注有惊喜) 静态网站:有别于动态网站,它就是只包含静态内容(如图片.音频.视频.HTML.CSS.JS)的网站,不依赖服务器端动态渲染页面. 那么静态网站托管应该如 ...

  5. 个人网站搭建保姆级教学:Hexo + Kaze + Gitee Pages

    前 言 建网站本身是一个很大的工程,涉及前端页面的搭建,网站数据的存储,还要购置服务器资源,甚至是后期的维护,过程相当繁琐. 不过如果仅仅是想搭建个人的网站,写写博客,想要美观,又不想操心太多和写博客 ...

  6. Web编程——新闻爬虫+网站搭建

    目录 实验内容 实验环境 实验过程 新闻爬虫 请求模块 网页信息提取模块 数据库存储模块 网站搭建 全文搜索 时间热度分析 词云 实验总结 实验内容 爬取新闻网站数据,并搭建网站可视化爬取结果.本次实 ...

  7. 网站建设-简单动态网站搭建

    课程介绍: 通过前面Clouder课程的学习,或许你已经掌握了在云服务器上发布和部署静态网页的方法,那么如何搭建一个可以随时更新内容的动态网站?通过本课程的学习,你将掌握如何在云端搭建全世界使用最多的 ...

  8. oracle接收输入参数,Oracle带输入输出参数存储过程(包括sql分页功能)

    记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...

  9. 个人网站搭建---godaddy域名+freewebhostingarea免费空间

    自己准备做一个个人网站,由于第一次做所以遇到了各种困难,现在把自己的一些经历经验贴出来供大家参考.此贴针对一个完全没有经验的菜鸟,大牛勿喷. 个人搭建一个网站首先要考虑的是网址(域名),然后是你的文件 ...

  10. 搭建可视化网页的software package_网页制作与网站搭建步骤教程

    原标题:网页制作与网站搭建步骤教程 现代建设网站,只需要一个鸣蝉建站系统的账号,注册一个账号直接用网站模板建站,基本上几十秒就可以做出网站的雏形,随后再添加相关的产品信息和内容,即可建成网站. 鸣蝉智 ...

最新文章

  1. 约瑟夫问题(c++)
  2. python面试-2018年最常见的Python面试题答案(上篇)
  3. servlet增删改查实例_SpringMVC4+MyBatis3+SQLServer 2014 整合(包括增删改查分页)
  4. 首次揭秘云原生Hologres存储引擎
  5. powershell加win的dns服务器,解决网站负载均衡问题
  6. Serverless实战 —— ​​​​​​​Laravel + Serverless Framework 快速创建 CMS 内容管理系统
  7. pythonpy文件打包成exe软件
  8. android用户界面之AlarmManager教程实例汇
  9. vue ---- 计算属性
  10. CentOS 6.8 编译安装MySQL5.5.32
  11. oracle 数据库为nomount状态,oracle 数据库为nomount状态
  12. 写一个NSString类的实现
  13. 光纤跳线接口_一文了解光纤配线架、光纤跳线、耦合器、收发器及光纤色谱顺序...
  14. zend studio php 错误提示,Zend Studio错误总结,zendstudio总结_PHP教程
  15. 【C学习】全通纸笔王网上阅卷系统 APMS_Setup.exe IP修改程序 - 附C/C#/Delphi源码
  16. 计算机导论与程序设计pdf,西安电子科技大学计算机导论与C语言程序设计 操作系统与常用办公软件知识.pdf...
  17. 漫画安全HIDS、EDR、NDR、XDR
  18. 数据库顶级会议介绍:VLDB、SIGMOD、ICDE
  19. 损益科目不进行结转导致的对账问题
  20. fiyme android底层,魅族首批Android 10底层Flyme于今日正式推送

热门文章

  1. python邮件群发_Python操作Gmail@定时定向群发邮件
  2. centos安装python3.8.1_centos6.6下安装python3.8.1后报错??报错-问答-阿里云开发者社区-阿里云...
  3. echarts切换飞线图未清空_讯飞iFLYOS成就产品快速落地 智能硬件迈入直道竞速赛...
  4. matlab中小波工具箱下载,matlab小波工具箱小波分析步骤
  5. string取某个符号后面的的_String.replace 用的不对性能可能差 10 倍,你用对了吗?...
  6. 进程间通信-命名管道FIFO
  7. Swift编程必备的iOS库 Pod
  8. 互联网知识:工作多年的程序员都说不全
  9. 【动手学深度学习】代码(持续更新)
  10. 用本地计算机做服务器提供外网访问:花生壳+tomcat