django数据库版分页实现
说到分页,我头大了一天,但是,最后还是克服了!!
我这里是使用了数据库存储,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数据库版分页实现相关推荐
- Django 搜索结果分页的实现 以及点击下一页搜索条件丢失可能的原因分析
1.Django 搜索结果分页的实现 在这里我们用django自带的分页模块来实现 这个paginator对象中带有如下属性: #per_page:每页显示条目数量 #count:数据总个数 #num ...
- Django-- (三) Django数据库操作
1.Django数据库 Django 非常适合构建数据库驱动型网站,它提供了简单而强大的工具(ORM),易于使用 Python 执行数据库查询. 2.ORM介绍 Object Relational M ...
- Django数据库操作查询
文章目录 Django数据库操纵查询 F和Q对象: 1.F对象: 2.Q对象: 2.聚合函数和排序函数 1.聚合函数: 2.排序函数: 3.级联查询: 1.关联查询 关联过滤查询 4.查询集 **查询 ...
- [jillzhang]ExtJs与WCF交互:生成树 --数据库版补充
原文见: http://www.cnblogs.com/jillzhang/archive/2008/06/15/1222233.html 已经讲得很清楚,本文只是将该篇WCF的方法换成数据库版 1. ...
- mybatis-generator 插件扩展,生成支持多种数据库的分页功能
2019独角兽企业重金招聘Python工程师标准>>> 背景: 在使用mybatis的过程中,考虑到整合的框架在后期使用的过程中,有可能是需要兼容到多种数据库的,在这种前提条件下,完 ...
- Django从理论到实战(part31)--Django数据库查询操作
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: Django数据库查询操作 查找是数据库操作中一个非常重要的技术,查询一般就是使用filter.exclude以及get三个 ...
- mysql分页存储过程 分页查询语句_分页存储过程(用存储过程实现数据库的分页代码)...
用存储过程实现数据库的分页代码,加快页面执行速度.具体的大家可以测试下. --******************************************************* --* 分 ...
- 盘点几种数据库的分页SQL的写法(转)
Data序列--盘点几种数据库的分页SQL的写法 http://www.cnblogs.com/fireasy/archive/2013/04/10/3013088.html 转载于:https:// ...
- django之快速分页
本文介绍djanog两种分页,第一是普通分页,第二是使用haystack全文检索的分页. 1.django自带分页功能,这个功能非常好用. 基本知识点: Django提供了数据分页的类,这些类被定义在 ...
最新文章
- 每年“骗”马云10亿,被骂大忽悠,他却当选中国工程院院士?
- 学Linux的你还在为正则表达式而挠头?
- FPGA的设计艺术(4)STA实战之不同时序路径的建立保持时间计算
- C# 中对WinForm窗体中的控件快速设置TableIndex次序
- 编译linux3内核,与busybox,用qemu模拟运行
- matlab画曲面二次,如何用matlab绘制二次B样条三维曲面(已知控制点和节点矢量)?...
- 查询数据库授权以及授权到期的处理方法
- 【任玉刚】给Android程序员的一些面试建议
- unity点击按钮跳转页面
- Mysql的explain,你真的会用吗?
- 简述keepalived和其工作原理,keepalived搭建mysql高可用,vip飘逸,避免单点故障@xinxin
- JS(javascript)中this的几种用法实例详解
- go linux下进程守护,Linux系统进程管理-Go语言中文社区
- 前端面试 React篇(上)
- 这是一个最好的时代,这是一个最糟的时代
- 谷歌打不开?谷歌在华遭遇至今最大规模屏蔽
- i.MX6ULL终结者Linux I2C驱动实验IMX6ULL的I2C总线驱动分析
- ubuntu tenda u12 无线配置
- Premiere Pro CS6软件安装教程
- 第五讲 二维费用的背包问题 HD FATE(二维完全背包)