问题:

当返回数据较多,如设置每页展示10条,数据接近200条,返回页码范围1~20,前端每个页码都显示的话,就会出现页码超出当前页面,被遮挡的页码无法操作和显示不美观;

代码优化:

在使用paginator转化为Page对象后,获取到num_pages:总的页码数,配合当前页码,进行判断

实现效果:

页面结合上下页和返回的pageRange,显示10个页码,并设置上下页,进行操作

代码实现:

动态返回页码逻辑:

如果当前页码-5,小于1,返回的页码范围: (1,11)

如果当前页码-5>1,且当前页码+5小于总页码,范围(当前页码-5,当前页码+5)

如果当前页码-5>1,且当前页码+5大于总页码,范围(当前页码-5,总的页码数+1)

views.py层代码

    def get(self, request):
p_index = int(request.GET.get('page', 1))
# 过滤状态等于0的数据
list = TestBatch.objects.filter(~Q(status=0)).all() page_count = 10
start = (p_index - 1) * page_count paginator = Paginator(list, page_count) currentPage = paginator.get_page(p_index).number data_p = paginator.page(p_index) # 页码超出12页时,前端显示页码会被遮挡,对页码进行处理,超出12时,返回指定规则的页码,上下页结合进行翻页
if paginator.num_pages > 12:
if currentPage - 5 < 1:
pageRange = range(1, 11)
elif currentPage + 5 > paginator.num_pages:
pageRange = range(currentPage - 5, paginator.num_pages+1)
else:
pageRange = range(currentPage - 5, currentPage + 5)
else:
pageRange = paginator.page_range
return render(request, 'page/batchList.html', {"batchs": data_p, "start": start, "currentPage": currentPage,"pageRange": pageRange})

配置html页面

Django Paginatior分页,页码过多,动态返回页码,页码正常显示的更多相关文章

  1. Python Django的分页,Form验证,中间件

    本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...

  2. Django 自定义分页类

    分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypag ...

  3. django之分页算法实现(Paginator)

    导入模块:from django.core.paginator import Paginator 一.Paginator的基本用法: from django.core.paginator import ...

  4. django之分页,纯python代码

    Django中分页 py文件代码 """ 自定义分页组件 可以返回分页的数据和分页的HTML代码 """ from django.http ...

  5. Django自定义分页

    分页 自定义分页 稳扎稳打版 def book(request): # 从URL取参数(访问的页码) page_num = request.GET.get("page") try: ...

  6. Django的分页和中间件

    一.分页 Django的分页器(paginator) view.py from django.shortcuts import render,HttpResponse # Create your vi ...

  7. WEB框架之Django实现分页功能

    一 Paginator分页器 1 首先在数据库中生成大量数据 def index(request) book_list = [] for i in rang(1000) book = Book(tit ...

  8. django项目分页

    测试版本 代码: # 测试分页users=[{'name':'alex{}'.format(i),'pwd':'aaa{}'.format(i)}for i in range(1,302)] def ...

  9. Django之分页升级版

    如果查询出的数据,被分页了,这个时候翻页的时候应该讲页数的参数和查询的参数一块在URL上显示 """ 分页器 """ from django ...

  10. 【django】分页

    分页 1.简单分页 from django.conf.urls import url from django.contrib import admin from app01 import views ...

随机推荐

  1. [FAQ] FinalCutPro 事件如何支持多个时间线

    左侧是建立的事件,右侧是默认的项目(也就是时间线上的剪辑项目). 如果需要这个事件里再弄一个时间线(比如剪辑另一个版本),左侧的事件上右击新建项目: 另一个项目,在这上面可以继续时间线的创作,等于是选 ...

  2. [Py] Jupyter 写入和执行 python 文件

    以 %%writefile request.py 开头. 下面写 python 代码,然后 shift + enter 键,可以把 python 代码写入开头指定的文件中,没有则自动创建. 以 %ru ...

  3. [FE] WebStorm, ESLint: Trailing spaces not allowed

    在 WebStorm 中搜索文件 .eslintrc.js 在里面的 rules 项中追加规则: 'no-trailing-spaces' : ['off', { 'skipBlankLines': ...

  4. [Contract] web3.eth.getAccounts, web3.eth.getCoinbase 使用场景区别

    web3.eth.getAccounts() 返回节点控制的账号列表(Promise returns Array) web3.eth.getCoinbase() 返回挖矿奖励所归集的地址(Promis ...

  5. WPF 优化 EnsureHandle 启动性能

    本文将记录一个在 WPF 应用程序启动过程中的性能优化点.如果一个窗口需要设置 WindowStyle 属性,那么在窗口 EnsureHandle 之前,设置 WindowStyle 属性将会比在 E ...

  6. dotnet 6 使用 DependentHandle 关联对象生命周期

    本文将告诉大家在 dotnet 6 新加入的 System.Runtime.DependentHandle 的类型的使用方法,通过 DependentHandle 可以实现将某个对象的引用生命周期和另 ...

  7. await this.$nextTick()和this.$nextTick(callback)有什么区别?记一次bug调试

    背景 需要实现一个需求,一个小区业务详情页面,在左侧菜单栏切换了小区后,详情页跟着切换. 这个详情页面是根据url上的/:id来确定小区id的,所以切换了小区后,应该切换路由. 于是这样实现: wat ...

  8. C++多态与虚拟:Objects 实例化(Objects Instantiation)探究

    一.Objects的创建 依据已有的class CPoint ,我们可以产生一个或多个object(对象),或者说是产生一个instance(实体): CPoint aPoint(7.2); // a ...

  9. 使用qemu运行risc-v ubuntu

    参考 Ubuntu installation on a RISC-V virtual machine using a server install image and QEMU 用到的文件 fw_ju ...

  10. 一、Doris演进史

    Apache Doris -- 为分析而生 Doris发展历程: Doris发展比较重要的关键节点与事件 #2008 - Doris1 :「筑巢引凤」的重要基石 早年,百度最主要的收入来源是广告.广告 ...