django分页实现
Django分页
Django提供了一个类Paginator用于分页,但Paginator并不具体管理具体的页的处理,而是使用Page对象管理具体页面。下面我们以一个具体的例子来说明一下分页的实现
文章模型:
class Articles(models.Model):tid = models.AutoField(primary_key=True)cid = models.ForeignKey('Category', models.DO_NOTHING, db_column='cid', blank=True, null=True)description = models.CharField(max_length=300)title = models.CharField(max_length=255)content = models.CharField(max_length=20000, blank=True, null=True)author = models.CharField(max_length=255, blank=True, null=True)pub_date = models.DateTimeField()replycount = models.IntegerField(blank=True, null=True)hits = models.IntegerField()isdeleted = models.IntegerField()noreply = models.IntegerField(blank=True, null=True)iscreator = models.IntegerField(blank=True, null=True)isrecommend = models.IntegerField(blank=True, null=True)tags = models.CharField(max_length=255, blank=True, null=True)class Meta:db_table = 'articles'
表中数据:
分页器对象
格式: Paginator(<query_set查询集>,每页显示数据的条数)
对象的属性
count 分页对象的个数
num_pages 总页数
page_range 页码的列表
方法
page(num) 返回page对象 如果给定的页码不存在 则抛出异常
例子代码:
# 需要导入Paginator类
from django.core.paginator import Paginator pagination = Paginator(articles,10)
page 对象
page对象具体负责每页的处理,包括每页的数据,当前页的页码,是否有上一页或下一页等。
类别 | 名称 | 说明 |
---|---|---|
属性 | object_list | 当前页码上的所有数据 |
属性 | number | 当前页码值 |
属性 | paginator | 返回Paginator的对象 |
方法 | has_next | 是否有下一页 |
方法 | has_previous | 是否有上一页 |
方法 | has_other_pages | 是否有上一页 或者下一页 |
方法 | next_page_number | 返回下一页的页码 |
方法 | previous_page_number | 返回上一页的页码 |
方法 | len | 返回当前页数据的个数 |
使用:
# 由分页器对象调用page方法创建,参数是当前页码
pager = pagination.page(page)
具体例子
路由配置(urls.py)
from django.urls import path
from App import views
app_name = "App"
urlpatterns = [#.....path("list/<int:page>/",views.article_list),]
视图(views.py)
# views.py
def article_list(request,page=1):articles = Articles.objects.all()# 实例化分页对象,一页两条记录pagination = Paginator(articles,10)page = pagination.page(page) #某一页的分页对象return render(request,'userlist.html',locals())
前端页面(list.html)
使用了bootstrap的样式
<!-- 部分代码 -->
<div class="page-box layui-row"><div id="pageItem"><nav aria-label="Page navigation"><ul class="pagination">{# 判断是不是有前一页 #}{% if pager.has_previous %}<li><a href="/list/{{ pager.previous_page_number }}/" aria-label="Previous"><span aria-hidden="true">«</span></a></li>{% else %}{# 如果没有前一页 禁止点击前一页 #}<li class="disabled"><a href="/list/{{ page }}/" aria-label="Previous"><span aria-hidden="true">«</span></a></li>{% endif %}{# 循环生成页码, page_range是一个整数页码列表 #}{% for cur in pagination.page_range %}{# 判断是不是当前页,如果是高亮显示 #}{% if cur == page %}<li class="active"><a href="/list/{{ cur }}/">{{ cur }}</a></li>{% else %}<li><a href="/list/{{ cur }}/">{{ cur }}</a></li>{% endif %}{% endfor %}{# 判断是不是有下一页 #}{% if pager.has_next %}<li><a href="/list/{{ pager.next_page_number }}/" aria-label="Next"><span aria-hidden="true">»</span></a></li>{% else %}<li class="disabled"><a href="/list/{{ page }}/" aria-label="Next"><span aria-hidden="true">»</span></a></li>{% endif %}</ul></nav></div></div>
最终效果:
django分页实现相关推荐
- 2019.03.20 mvt,Django分页
MVT模式 MVT各部分的功能: M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理. V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回响应. T全拼为T ...
- 第八篇Django分页
Django分页 1.复杂版 data = []for i in range(1, 302):tmp = {"id": i, "name": "ale ...
- Django 分页查询并返回jsons数据,中文乱码解决方法
Django 分页查询并返回jsons数据,中文乱码解决方法 参考文章: (1)Django 分页查询并返回jsons数据,中文乱码解决方法 (2)https://www.cnblogs.com/jo ...
- django ajax 查询,Django分页和Ajax查询
在Django中,实现分页以在多个页面上显示查询项目是非常简单的.使用Ajax仅更新实际发生更改的页面位,而不是每次加载整个页面也是非常直接的.但是,当我们将两者结合在一起时,我发现它有点问题.Dja ...
- Django分页+增删改查
Django分页+增删改查 演示 源码下载地址:https://download.csdn.net/download/qq_35622606/87719248 其他小笔记: django-admin. ...
- django分页查询
Django分页查询(整合vue) 一.django部分 在view.py里添加分页查询方法 from django.http import JsonResponse from django.view ...
- Django 分页和使用Ajax5.3
分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...
- Django分页的基本实现办法
Django自带一个分页模块Pagination,具体的参考官方文档,我在这里简单介绍一下具体的例子,模拟一个常用场景,列出部分的代码出来.场景是这样的:我们有一个blog表,其中有若干条记录,我们要 ...
- django分页模块
前端分页 将所有数据一次性返回给前端页面,再通过js进行分页,对数据库负担比较大. 后端分页 在数据库查询的时候,就查询出指定页的数据,不多查. Article.object.all()[:5] Qu ...
最新文章
- 简单配置nginx反向代理,实现跨域请求
- R语言广义线性模型Logistic回归模型列线图分析(nomogram)
- Apr.2010 Microsoft MVP连任
- Discuz!X论坛开发(九)二次开发之Discuz X2 文件目录功能详解
- C语言linux getopt_long()函数(命令行解析)(getopt、getopt_long_only)(短选项 -,长选项 --)(option结构体)(optind、optarg变量)
- ES6相关特性的整理(变量数据结构)
- springboot不会运行gc_SpringBoot项目深度优化和Jvm调优
- 如何使用计算机实现fft,快速傅立叶变换(FFT)的计算机实现..doc
- 数据结构及算法总结(概述)
- Lotus Domino服务器及其应用系统的高级管理(2)
- 破解极域电子教室密码
- php挑战答题,挑战答题小程序5.3.1开源
- Win 10系统怎么确认是否打开了虚拟化
- 【Love2d从青铜到王者】第二篇:Love2d详细介绍以及官网安装
- linux下设置双系统选项,linux双系统【操作步骤】
- ARM Coresight
- NVidia GPU 无法调节风扇转速
- a-upload文件夹上传
- CITA架构与云计算服务
- 使用FFmpeg进行mp4与m3u8之间转换