python中的分页封装

2023-11-16

utils文件夹下面的pagination

"""
自定义分页组件
"""
import math
from django.utils.safestring import mark_safe
class Pagination(object):
    def __init__(self, request,queryset, page_size=20,page_param="page",plus=5):
        page =  request.GET.get(page_param,"1")
        if page.isdecimal():
            page = int(page)
        else:
            page = 1
        self.page = page
        self.page_size = page_size
        self.start = (page - 1) * page_size
        self.end = page * page_size
        self.page_queryset = queryset[self.start: self.end]
        page_count = queryset.count()
        total = math.ceil(page_count / page_size)
        self.total = total
        self.plus = plus
        # print(total)
    def html(self):
        # plus = 5
        if self.total <= 2 * self.plus + 1:
            # 当前页面比较少
            start = 1
            end = self.total
        else:
            #     页数比较多的时候
            if self.page <= self.plus:
                start = 1
                end = 2 * self.plus
            else:
                if (self.page + self.plus) > self.total:
                    start = self.total - 2 * self.plus
                    end = self.total
                else:
                    start = self.page - self.plus
                    end = self.page + self.plus
        # 生成页码
        dict_list_str = []
        if self.page > 1:
            prev = '<li><a href="?page={}">《</a></li>'.format(self.page - 1)
        else:
            prev = '<li><a href="?page={}">《</a></li>'.format(1)
        dict_list_str.append(prev)

        for i in range(start, end + 1):
            if i == self.page:
                ele = '<li class="active"><a href="?page={}">{}</a></li>'.format(i, i)
            else:
                ele = '<li><a href="?page={}">{}</a></li>'.format(i, i)

            dict_list_str.append(ele)

        if self.page < self.total:
            prev = '<li><a href="?page={}">》</a></li>'.format(self.page + 1)
        else:
            prev = '<li><a href="?page={}">》</a></li>'.format(self.total)
        dict_list_str.append(prev)
        page_string = mark_safe(''.join(dict_list_str))
        return page_string

view.py下面的调分页

def prettynum_list(request):
    # 页码
    dict_list = {}
    value = request.GET.get('q','')
    if value :
        dict_list['mobile__contains'] = value
    queryset= PrettyNum.objects.filter(**dict_list)
    page_object = Pagination(request,queryset,page_size=20)
    queryset = PrettyNum.objects.all()

    page_queryset = page_object.page_queryset
    # print(page_count)
    page_string = page_object.html()

    # 当前页
    return render(request,'prettynum_list.html' ,{'pretty_list':page_queryset,'value':value,'page_string':page_string,})

html页面的展示

{% extends 'layout.html' %}
    {% block content %}
 <div class="container">
    <div style="margin-bottom:10px">
      <a class="btn btn-success" href="/prettynum/add/">
        <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>新建靓号</a>
        <div style="float:right;width:300px">
                    <form method="get">
          <div class="input-group">

                  <input type="text" class="form-control" value="{{value}}" name="q" placeholder="Search for...">
                    <span class="input-group-btn">
                      <button class="btn btn-default glyphicon " type="submit">
                          <span class="glyphicon glyphicon-zoom-in" aria-hidden="true"></span>
                      </button>
                    </span>

          </div>
       </form>
        </div>
    </div>
    <div>
      <div class="panel panel-default">
      <!-- Default panel contents -->
      <div class="panel-heading"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>用户列表</div>
      <!-- Table -->
      <table class="table table-bordered">
        <thead>
          <tr>
            <th>ID</th>
            <th>手机号</th>
            <th>价格</th>
            <th>级别</th>
            <th>状态</th>
            <th>编辑</th>

          </tr>
        </thead>
        <tbody>
        {% for obj in pretty_list %}
        <tr>
            <th>{{obj.id}}</th>
            <th>{{obj.mobile}}</th>
            <th>{{obj.price}}</th>
            <th>{{obj.get_level_display}}</th>
            <th>{{obj.get_status_display}}</th>
            <th>
                <a href="/prettynum/{{obj.id}}/edit/" class="btn btn-info  btn-xs">编辑</a>
                <a href="/prettynum/delete/?nid={{obj.id}}" class="btn btn-danger  btn-xs">删除</a>
            </th>

        </tr>
        {% endfor %}
        </tbody>
      </table>
    </div>
    </div>
     <div class="bs-example" data-example-id="disabled-active-pagination" style="text-align:center">
    <nav aria-label="...">
      <ul class="pagination">
          {{page_string}}
<!--          {{page_str_list}}-->
<!--        <li ><a href="?page=1">1 <span class="sr-only">(current)</span></a></li>-->
<!--        <li><a href="?page=2">2</a></li>-->
<!--        <li><a href="?page=3">3</a></li>-->
<!--        <li><a href="?page=4">4</a></li>-->
<!--        <li><a href="?page=5">5</a></li>-->

     </ul>
   </nav>
  </div>
  </div>
    {% endblock %}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中的分页封装 的相关文章

随机推荐

  • Spring Cloud Sentinel(限流、熔断、降级)、SpringBoot整合Sentinel、Sentinel的使用-60

    文章目录 一 Sentinel简介 1 1 官方文档 1 2 项目地址 1 3 特征 1 4 Sentinel 分为两个部分 1 5 基本概念 1 6 主要作用 流量控制 熔断降级 系统负载保护 1 7 Hystrix 与 Sentinel
  • 机器学习——KNN实现

    一 KNN K近邻 概述 KNN一种基于距离的计算的分类和回归的方法 其主要过程为 计算训练样本和测试样本中每个样本点的距离 常见的距离度量有欧式距离 马氏距离等 对上面所有的距离值进行排序 升序 选前k个最小距离的样本 根据这k个样本的标
  • web信息收集----网站指纹识别

    文章目录 一 网站指纹 web指纹 二 CMS简介 三 指纹识别方法 3 1 在线网站识别 3 2 工具识别 3 3 手动识别 3 4 Wappalyzer插件识别 一 网站指纹 web指纹 Web指纹定义 Web指纹是一种对目标网站的识别
  • Stata改变变量label

    我们用dta格式数据时 label栏可能是无法识别的字符 其中一个原因是我们电脑安装的是简体中文版 但数据原来的label是繁体字 只要用 label var命令就可以更改了 具体用法 label var 变量名称 变量新label 如下所
  • 好像还挺好玩的GAN8——SRGAN实现图像的分辨率提升

    好像还挺好玩的GAN8 SRGAN实现图像的分辨率提升 注意事项 学习前言 什么是SRGAN 代码与训练数据的下载 神经网络组成 1 生成网络 2 判别网络 训练思路 1 对判别模型进行训练 2 对生成模型进行训练 全部代码 1 data
  • JS+CSS实现一个文字跟随屏幕滑动渐入渐出效果

    效果展示 可以看到文字随着屏幕滑动条的滚动逐渐渐入渐出 接下来看看我是怎么实现的把 实现原理 要实现这个效果也很简单 就是利用background image属性的linear gradient给文字加上渐变背景 然后设置backgroun
  • npm、yarn、pnpm如何清除缓存?

    前端工程化创建项目会经常使用各种安装包管理工具 安装各种前端依赖包 例如 npm yarn pnpm等 时间一长 各种安装包管理工具的在安装依赖时 留下的缓存文件就会变得很大 以至于影响系统的运行 因此必要时清除缓存就是一个不错的选择 本文
  • 磁盘调度算法(FCFS、SSTF)例题

    一 原理 先来先服务 FCFS first come first service 根据进程请求访问磁盘的先后次序进行调度 最短寻道时间优先 SSTF Shortest Seek Time First 选择访问的磁道与当前磁头所在的磁道距离最
  • 下列不是HTML网页开发工具的是,网页开发工具有哪些

    越来越多的移动端和桌面端应用开始使用HTML CSS和JS来开发了 而网页设计更是离不开这些语言所需要的工具 下面由小编为大家整理的网页开发工具 希望大家喜欢 网页开发工具 1 Prepo Prepo 是一款同时登录Mac和iOS平台的应用
  • 变分推断

    变分推断是近年来深度学习中一个非常重要的技术手段 推断困难通常是指难以计算p h v 或其期望 其中v指的是模型的可观测变量 而h表示隐藏变量 在深度神经网络中 多层的隐藏变量之间联系复杂 无法通过一个具体地概率密度函数来刻画隐藏变量的实际
  • 微信小程序wx.getUserProfile的用法

    接触了以前开发的一个微信小程序 发现wx getUserInfo这个官方接口不能获取用户的信息 我重新创建了一个新的项目 发现可以用wx getUserProfile这个官方接口来获取用户信息 具体操作如下 1 首先在xxxx jslim里
  • transformer的学习记录【完整代码+详细注释】(系列二)

    文章目录 1 编码器部分实现 1 1 掩码张量 1 1 1 用 np triu 生产上三角矩阵 1 1 2 生成掩码张量的代码 1 1 3 掩码张量可视化展示 1 1 4 掩码张量学习总结 1 2 注意力机制 1 2 1 注意力机制 vs
  • QT6.4制作动态组织架构图

    最近项目需要用QT开发组织架构图 本来先网上找个demo拿来即用 但是找了一圈 要么不能编译 要么运行崩溃 要么很粗糙什么细节都没做 离实际应用差距甚远 于是我自己重新编写调试 耗费几天时间 在Window10 X64上运行 五层级别 右键
  • Java TreeMap 源码解析

    Java TreeMap 源码解析 继上篇文章介绍完了HashMap 这篇文章开始介绍Map系列另一个比较重要的类TreeMap 大家也许能感觉到 网络上介绍HashMap的文章比较多 但是介绍TreeMap反而不那么多 这里面是有原因 一
  • 网络安全应急响应----4、DDoS攻击应急响应

    文章目录 一 DDoS攻击简介 二 DDoS攻击方法 1 消耗网络带宽资源 1 1 ICMP Flood ICMP洪水攻击 1 2 UDP Flood UDP洪水攻击 2 消耗系统资源 2 1 TCP Flood 2 2 SYN Flood
  • PoDoFo实现本地PDF加载

    PdfMemDocument类 未完成 继承 PdfDocument 友元 PdfWriter 构造函数 PdfMemDocument 构造空对象 PdfMemDocument bool bOnlyTrailer 构造对象 bOnlyTra
  • 若依前后端分离部署(二级域名+反向代理+负载均衡)

    前言 最近使用若依前后端进行二次开发 在部署时遇到了一些问题 在此记录一些经验 仅记录学习和供参考 如果错误请指正 谢谢 问题描述 由于服务器使用Nginx转发域名请求 无法使用根目录 于是在前端加入了二级目录 修改部分如下图 这里是前端入
  • 【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

    目录 一 初始化列表 初始化列表概念 初始化列表的优点 使用场景 explicit关键字 二 Static成员 Static成员概念 静态数据成员 静态函数成员 使用静态成员的优点 使用静态成员的注意事项 三 友元 友元的概念 类友元 函数
  • vue2 img加载失败时给默认图片

  • python中的分页封装

    utils文件夹下面的pagination 自定义分页组件 import math from django utils safestring import mark safe class Pagination object def init