说到分页,我头大了一天,但是,最后还是克服了!!

我这里是使用了数据库存储,data(第n页显示数据条,包括前面的页码),page(页码)

每次点击分页按钮,发送一次请求,数据库的data、page都会改变。

now!look here!!!!

1、首先建路由、视图函数、和视图页面、定义模型

(1)视图模板

(2)路由

(3)views.py

(4)models.py

class Other(models.Model):data = models.IntegerField(verbose_name='变量')page = models.IntegerField(verbose_name='页数')

(5)在数据库上添加一条数据

(6)在show_list.html上添加分页html

点击一个按钮,发送一次post请求,当前页数是不可点击的,只能显示

<div class="footer">{# data{{ data }}#}<form method="post" action="/stu/list/?paging=pr" class="last_disable">{% csrf_token %}<input type="submit" name="pr" value="<<" class="btn"></form><form method="post" action="/stu/list/?paging=first">{% csrf_token %}<input type="submit" name="first" value="1" class="btn last"></form>...{# 当前页数 #}<span class="btn current" style="background:#5596e4;">{{ page }}</span>...<form method="post" action="/stu/list/?paging=end">{% csrf_token %}<input type="submit" name="end" value="{{ end }}" class="btn next"></form><form method="post" action="/stu/list/?paging=nx" class="next_disable">{% csrf_token %}<input type="submit" name="nx" value=">>" class="btn"></form></div>

(7)css模板

相对定位,放在你需要的盒子里面

* {margin: 0;padding: 0;box-sizing: border-box;
}li {list-style: none;
}a {text-decoration: none;color: #bdbdbd;
}/* 去掉input点击后边框颜色 */input {outline: none;
}/* 去掉input,type为number时的上下箭头 */input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {-webkit-appearance: none;
}form {display: inline;
}input[type=submit] {padding: 8px 20px;background-color: #5596e4;border: 0;font-size: 13px;border-radius: 10px;color: #fff;cursor: pointer;
}.footer {position: absolute;/* 这里位置由你来定义 */bottom: 30px;/* 这里是,盒子以左边的走了定义相对定位的父亲的百分之50,
所以它要退回百分之50自身的长度,才能居中 */left: 50%;transform: translate(-50%);
}.footer .btn {margin: 0 10px;padding: 15px;border: 0;box-shadow: 2px 2px 9px -1px rgb(0 0 0 / 20%);color: #ffffff;border-radius: 10px;
}

(8)js模板

这里,我用了jq,判断,当前页如果和第一页相同,就隐藏上一页按钮

如果不同就都显示,当前页如果和最后一页相同,就隐藏下一页按钮

$(function (){// << >> 隐藏显示if ($(".current").html() === $(".last").val() && $(".current").html() === $(".next").val()) {$(".last_disable").hide()$(".next_disable").hide()} else if ($(".current").html() === $(".last").val() && $(".current").html() !== $(".next").val()) {$(".last_disable").hide()$(".next_disable").show()} else if ($(".current").html() !== $(".last").val() && $(".current").html() === $(".next").val()) {$(".last_disable").show()$(".next_disable").hide()} else {$(".last_disable").show()$(".next_disable").show()}
})

(9)页面效果

2、视图函数的编写

# 引入Other模型
from student.models import StudentInfo, DelStuInfo, Other
data_list = StudentInfo.objects.all()[0:10] 查【第一条到第十条之间的数据】
  • 每次刷新【GET请求】,data、page更新回最初的 第一页10数据 ,page回到第一页的页码
  • 后面,每次点击下一页,data+10,page+1 ,这里查询【data-10:data】,即第一页的【0:10】,点下一页查询【10:20】,由于数据库data=10,点击下一页data=20,更新数据库上传data=20,所以查询【data-10:data】
  • 每次点击上一页,data-10,page-1,这里查询【data-10:data】,即第二页的【10:20】,点击上一页查询【0:10】,由于数据库里面的data=20了,点击上一页data=10,更新数据库上传data=20,所以查询【data-10:data】
  • 每次点击第一页时,更新数据库的 data =10,page = 1,查询用【0:10】
  • 每次点击最后一页时,更新数据库data=end*10,即最后一页*10为最后一页展示的数据在数据库的位置,这里的page=end最后一页,查询【end*10-10:end*10】区间,比如最后一页end=3,就查询【20:30】的数据
# 存储学生页面
def show_list(request):# 计算存储数据和 计算最后一页页面count = StudentInfo.objects.all().count()# 当count=10 、 20 、30。。时,计算最后一页,10/10+1就等于2了,这个bug# 所以当count=10。。。, 进行count - 1,int(count/10)+1 = 1,这样最后一页计算就对了for i in range(0, 1001, 10):if count == i:count = count - 1end = int(count / 10) + 1# 获取数据库上的变量和页数,显示数据条和初始页数sql = Other.objects.filter(id=1).first()sqldata = sql.datasqlpage = sql.pageif request.method == "GET":data_list = StudentInfo.objects.all()[0:10]Other.objects.filter(id=1).update(data=10, page=1)return render(request, 'show_list.html', {'data_list': data_list, 'count': count, 'page': 1, 'end': end})paging = request.GET.get("paging")if paging == 'nx':if sqldata != end*10:sqldata = sqldata + 10data_list = StudentInfo.objects.all()[sqldata - 10:sqldata]sqlpage = sqlpage + 1Other.objects.filter(id=1).update(data=sqldata, page=sqlpage)return render(request, 'show_list.html',{'data_list': data_list, 'count': count, 'page': sqlpage, 'end': end, 'data': sqldata})else:data_list = StudentInfo.objects.all()[end * 10 - 10:end * 10]return render(request, 'show_list.html', {'data_list': data_list, 'count': count, 'page': end, 'end': end})elif paging == 'pr':if sqldata != 10:sqldata = sqldata - 10data_list = StudentInfo.objects.all()[sqldata - 10:sqldata]sqlpage = sqlpage - 1Other.objects.filter(id=1).update(data=sqldata, page=sqlpage)return render(request, 'show_list.html',{'data_list': data_list, 'count': count, 'page': sqlpage, 'end': end, 'data': sqldata})else:data_list = StudentInfo.objects.all()[0:10]return render(request, 'show_list.html', {'data_list': data_list, 'count': count, 'page': sqlpage, 'end': end, 'data': sqldata})elif paging == 'first':Other.objects.filter(id=1).update(data=10, page=1)data_list = StudentInfo.objects.all()[0:10]return render(request, 'show_list.html', {'data_list': data_list, 'count': count, 'page': 1, 'end': end})elif paging == 'end':Other.objects.filter(id=1).update(data=end * 10, page=end)data_list = StudentInfo.objects.all()[end * 10 - 10:end * 10]return render(request, 'show_list.html', {'data_list': data_list, 'count': count, 'page': end, 'end': end})

在vue框架中做的分页器组件:

超级详细:一个漂亮的Vue分页器组件的实现_打不着的大喇叭的博客-CSDN博客

django数据库版分页实现相关推荐

  1. Django 搜索结果分页的实现 以及点击下一页搜索条件丢失可能的原因分析

    1.Django 搜索结果分页的实现 在这里我们用django自带的分页模块来实现 这个paginator对象中带有如下属性: #per_page:每页显示条目数量 #count:数据总个数 #num ...

  2. Django-- (三) Django数据库操作

    1.Django数据库 Django 非常适合构建数据库驱动型网站,它提供了简单而强大的工具(ORM),易于使用 Python 执行数据库查询. 2.ORM介绍 Object Relational M ...

  3. Django数据库操作查询

    文章目录 Django数据库操纵查询 F和Q对象: 1.F对象: 2.Q对象: 2.聚合函数和排序函数 1.聚合函数: 2.排序函数: 3.级联查询: 1.关联查询 关联过滤查询 4.查询集 **查询 ...

  4. [jillzhang]ExtJs与WCF交互:生成树 --数据库版补充

    原文见: http://www.cnblogs.com/jillzhang/archive/2008/06/15/1222233.html 已经讲得很清楚,本文只是将该篇WCF的方法换成数据库版 1. ...

  5. mybatis-generator 插件扩展,生成支持多种数据库的分页功能

    2019独角兽企业重金招聘Python工程师标准>>> 背景: 在使用mybatis的过程中,考虑到整合的框架在后期使用的过程中,有可能是需要兼容到多种数据库的,在这种前提条件下,完 ...

  6. Django从理论到实战(part31)--Django数据库查询操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: Django数据库查询操作 查找是数据库操作中一个非常重要的技术,查询一般就是使用filter.exclude以及get三个 ...

  7. mysql分页存储过程 分页查询语句_分页存储过程(用存储过程实现数据库的分页代码)...

    用存储过程实现数据库的分页代码,加快页面执行速度.具体的大家可以测试下. --******************************************************* --* 分 ...

  8. 盘点几种数据库的分页SQL的写法(转)

    Data序列--盘点几种数据库的分页SQL的写法 http://www.cnblogs.com/fireasy/archive/2013/04/10/3013088.html 转载于:https:// ...

  9. django之快速分页

    本文介绍djanog两种分页,第一是普通分页,第二是使用haystack全文检索的分页. 1.django自带分页功能,这个功能非常好用. 基本知识点: Django提供了数据分页的类,这些类被定义在 ...

最新文章

  1. 每年“骗”马云10亿,被骂大忽悠,他却当选中国工程院院士?
  2. 学Linux的你还在为正则表达式而挠头?
  3. FPGA的设计艺术(4)STA实战之不同时序路径的建立保持时间计算
  4. C# 中对WinForm窗体中的控件快速设置TableIndex次序
  5. 编译linux3内核,与busybox,用qemu模拟运行
  6. matlab画曲面二次,如何用matlab绘制二次B样条三维曲面(已知控制点和节点矢量)?...
  7. 查询数据库授权以及授权到期的处理方法
  8. 【任玉刚】给Android程序员的一些面试建议
  9. unity点击按钮跳转页面
  10. Mysql的explain,你真的会用吗?
  11. 简述keepalived和其工作原理,keepalived搭建mysql高可用,vip飘逸,避免单点故障@xinxin
  12. JS(javascript)中this的几种用法实例详解
  13. go linux下进程守护,Linux系统进程管理-Go语言中文社区
  14. 前端面试 React篇(上)
  15. 这是一个最好的时代,这是一个最糟的时代
  16. 谷歌打不开?谷歌在华遭遇至今最大规模屏蔽
  17. i.MX6ULL终结者Linux I2C驱动实验IMX6ULL的I2C总线驱动分析
  18. ubuntu tenda u12 无线配置
  19. Premiere Pro CS6软件安装教程
  20. 第五讲 二维费用的背包问题 HD FATE(二维完全背包)

热门文章

  1. MindManager2022免费版本思维导图工具更新
  2. ctrlz删除的文件怎么恢复?
  3. 企业网站伪原创是否依然对SEO有效
  4. 双十一买哪款蓝牙耳机划算?性价比高的蓝牙耳机排行榜
  5. VMware虚拟机不能联网终极大招
  6. html动画、过渡实例
  7. 淘宝频现“双胞胎”消费诚信在哪里?
  8. 赛季更新服务器维修,20190925维护公告解读
  9. 青岛职业技术学院计算机专业录取分数线,2017年青岛市中职技校录取分数线公布...
  10. 设计数据密集型应用—— 数据系统的未来(12 下)