【银角大王——Django课程——分页显示功能实现】

分页显示功能实现

  • 添加假数据,然后演示分页功能
    • 分页——功能实现
      • 基于之前的靓号列表函数添加代码
      • 只显示10条——按照等级排序
      • 页码list表样式——bootstrap样式
      • 显示当前页面——前五页,后五页
      • 给当前页添加样式
      • 页码bug更改——出现负数,没有数据的页码——设置极值
        • 不设置极值时出现的情况——会出现负数,或者超出数据库总条页码数
        • 设置极值后
      • 上一页,下一页,首页,尾页核心代码
      • 添加一个页面跳转框
      • view.py——靓号展示函数全部代码:
      • HTML页面代码:

添加假数据,然后演示分页功能

在这里插入图片描述

分页——功能实现

#取满足条件的前十条
models.PrettyNum.objects.filter(id=1)[0:10]

#从全部里面取0到10条
models.PrettyNum.objects.all()[0:10]

基于之前的靓号列表函数添加代码

在这里插入图片描述

完整列表函数代码如下

#靓号列表
def pretty_list(request):
    #创建300行数据
    # for i in range(300):
    #        models.PrettyNum.objects.create(mobile="18118118118",price=10,level=1,status=1)



    #搜索时没有条件就传入空字典,也就相当于.all()
    data_dict={}

    #构件搜索
    #获取q值——名字为q的input框的值
    #get中参数——有值拿值,没有值传空
    search_data=request.GET.get('q',"")
    if search_data:
        # 为列表赋值
        data_dict["mobile__contains"] = search_data



    #根据用户想要访问的页码,计算出起止位置
    page=int(request.GET.get('page',1))
    page_size=10
    start=(page-1)*page_size
    end=page*page_size

    #将筛选的值通过filter(**data_dict)传递过去
    queryset=models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]

    #可以进行排序
    # models.PrettyNum.objects.all().order_by("-id")
    #按照等级来显示
    # queryset=models.PrettyNum.objects.all().order_by("-level")
    return render(request,'pretty_list.html',{"queryset":queryset,"search_data":search_data})

只显示10条——按照等级排序

在这里插入图片描述

页码list表样式——bootstrap样式

  1. views.py——核心代码(不是整个函数代码——完整函数代码后面会给出)代码语句:
#定义一个空的列表来收集页面
    page_str_list=[]
    #循环生成li标签,并且传值——循环生成li标签,并且传值——循环生成li标签,并且传值
    for i in range(1,21):
        # ele='< li > < a href = "/pretty/list/?page=1" > 1 < / a > < / li >'
        ele ='<li><a href="/pretty/list/?page={}">{}</a></li>'.format(i,i)
        page_str_list.append(ele)
    #返还给前端页面的数据值
    #导入包from django.utils.safestring import mark_safe
    #page_string="".join(page_str_list)
    #将page_string包裹起来——使用mark_safe——表示是安全的
    #编译成HTML
    #我为啥包裹了显示不出来——显示出来了
    page_string = mark_safe("".join(page_str_list))


    #可以进行排序
    # models.PrettyNum.objects.all().order_by("-id")
    #按照等级来显示
    # queryset=models.PrettyNum.objects.all().order_by("-level")
    return render(request,'pretty_list.html',{"queryset":queryset,"search_data":search_data,"page_string":page_string})

2.html代码:
在这里插入图片描述

3.页面展示:
在这里插入图片描述
因为这篇文章是两天写的会有一些忘记

显示当前页面——前五页,后五页

在这里插入图片描述
代码修改(bug会后面解决):
在这里插入图片描述

给当前页添加样式

效果如图
在这里插入图片描述
代码修改:
在这里插入图片描述

页码bug更改——出现负数,没有数据的页码——设置极值

不设置极值时出现的情况——会出现负数,或者超出数据库总条页码数

在这里插入图片描述

设置极值后
  • 小的极值
  • 大的极值
    在这里插入图片描述
    效果如图所示:——————当(当前页面)page小于5时,始终显示1-11页页码,不会再出现负值(最后一页也类似)
    请添加图片描述

上一页,下一页,首页,尾页核心代码

在这里插入图片描述
效果图:
在这里插入图片描述
效果展示

请添加图片描述

添加一个页面跳转框

HTML代码:
在这里插入图片描述
效果演示:
请添加图片描述

view.py——靓号展示函数全部代码:

#靓号列表
def pretty_list(request):
    #创建300行数据
    # for i in range(300):
    #        models.PrettyNum.objects.create(mobile="18118118118",price=10,level=1,status=1)



    #搜索时没有条件就传入空字典,也就相当于.all()
    data_dict={}

    #构件搜索
    #获取q值——名字为q的input框的值
    #get中参数——有值拿值,没有值传空
    search_data=request.GET.get('q',"")
    if search_data:
        # 为列表赋值
        data_dict["mobile__contains"] = search_data



    #根据用户想要访问的页码,计算出起止位置
    page=int(request.GET.get('page',1))
    page_size=10
    start=(page-1)*page_size
    end=page*page_size
    #数据总条数
    total_count= models.PrettyNum.objects.filter(**data_dict).order_by("-level").count()
    #将筛选的值通过filter(**data_dict)传递过去
    queryset=models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]

    #页码总数divmod()——结果为(商,余数)
    total_page_count,div = divmod(total_count,page_size)
    if div:
        total_page_count+=1
    #页码
    # < li > < a
    # href = "/pretty/list/?page=1" > 1 < / a > < / li >
    # < li > < a
    # href = "/pretty/list/?page=2" > 2 < / a > < / li >
    # < li > < a
    # href = "/pretty/list/?page=3" > 3 < / a > < / li >
    # < li > < a
    # href = "/pretty/list/?page=4" > 4 < / a > < / li >
    # < li > < a
    # href = "/pretty/list/?page=5" > 5 < / a > < / li >
    #定义一个空的列表来收集页面

    #计算出当前页前五页,后五页——计算出当前页前五页,后五页
    plus=5
    #数据量少的时候,全部页码显示
    if total_page_count <= 2*plus+1:
        start_page=1
        end_page=total_page_count
    #数据量多的时候,只显示当前页面的前五,后五页
    else:
        #当前页小于5时,开始固定,结尾为2*plus+1,显示十个页码——————————小的极值
        if page <= plus:
            start_page=1
            end_page=2*plus+1
        else:
            #当前页大于5
            #当前页+5大于total——————大的极值
            if (page+plus) >= total_page_count:
                #开始值应该为总页码向前推十个页码
                start_page=total_page_count-2*plus
                #结束值应该是总页码
                end_page=total_page_count
            #一般情况下的页码显示
            else:
                start_page=page-plus
                end_page=page+plus





    #页码
    page_str_list=[]

    #首页————————————————————————
    page_str_list.append('<li><a href="/pretty/list/?page={}">首页</a></li>'.format(1))

    #处理上一页——————处理上一页————————处理上一页
    #页码大于一时,才可以有上一页
    if page > 1:
        pre_page='<li><a href="/pretty/list/?page={}">上一页</a></li>'.format(page-1)
    #否则上一页标签一直指向第一页即可
    else:
        pre_page ='<li><a href="/pretty/list/?page={}">上一页</a></li>'.format(1)
    #将上一页标签加到页码数组中
    page_str_list.append(pre_page)

    #循环生成li标签,并且传值——循环生成li标签,并且传值——循环生成li标签,并且传值
    #range前取,后不取1
    for i in range(start_page, end_page+1 ):
    # for i in range(1,total_page_count+1):
        # ele='< li > < a href = "/pretty/list/?page=1" > 1 < / a > < / li >'
    #页面等于当前页——添加一个样式li class="active"
        if i== page:
            ele ='<li class="active"><a href="/pretty/list/?page={}">{}</a></li>'.format(i,i)
        #不是当前页就不加样式
        else:
            ele = '<li><a href="/pretty/list/?page={}">{}</a></li>'.format(i, i)
        page_str_list.append(ele)

    #下一页——放在页码循环后面
    #当前页码小于最后一页
    if page < total_page_count:
        next_page = '<li><a href="/pretty/list/?page={}">下一页</a></li>'.format(page + 1)
    # 否则,下一页标签一直指向最后页即可
    else:
        next_page = '<li><a href="/pretty/list/?page={}">下一页</a></li>'.format(total_page_count)
        # 将上一页标签加到页码数组中
    page_str_list.append(next_page)
    # 尾页————————————————————————
    page_str_list.append('<li><a href="/pretty/list/?page={}">尾页</a></li>'.format(total_page_count))


    #返还给前端页面的数据值
    #导入包from django.utils.safestring import mark_safe
    #page_string="".join(page_str_list)
    #将page_string包裹起来——使用mark_safe——表示是安全的
    #编译成HTML
    #我为啥包裹了显示不出来——显示出来了
    page_string = mark_safe("".join(page_str_list))


    #可以进行排序
    # models.PrettyNum.objects.all().order_by("-id")
    #按照等级来显示
    # queryset=models.PrettyNum.objects.all().order_by("-level")
    return render(request,'pretty_list.html',{"queryset":queryset,"search_data":search_data,"page_string":page_string})


HTML页面代码:

{% extends 'layout.html'%}
{% block content %}
<div class="container" xmlns="http://www.w3.org/1999/html">
      <div style="margin-bottom: 10px" class="clearfix">
<!--        新建用户按钮-->
            <a class="btn btn-success" href="/pretty/add/" >
                <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                新建靓号
            </a>
<!--            添加搜索框-添加搜索框-添加搜索框-->
            <div style="float:right ;width:300px;">

                <form method="get">
                            <div class="input-group">

<!--                                使得name="q",传递值-->
<!--                                给input框设置一个默认的值——value="{{search_data}}"——将用户输入的值保留在框内,不会因为跳转而消失-->
                                  <input type="text" name="q" class="form-control" placeholder="Search for..." value="{{search_data}}">
                                  <span class="input-group-btn">
                                        <button class="btn btn-default" type="submit">

                                            <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                                        </button>
                                  </span>

                             </div><!-- /input-group -->
                </form>
            </div>



      </div>


    <div class="panel panel-default">
      <!-- Default panel contents -->
      <div class="panel-heading">
        <span class="glyphicon glyphicon-list" aria-hidden="true"></span>
        靓号列表
      </div>
      <div class="panel-body">
        <p>欢迎进入到靓号管理页面,请安全操作!</p>
      </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 queryset %}
          <tr>
              <td>{{obj.id}}</td>
              <td>{{obj.mobile}}</td>
              <td>{{obj.price}}</td>
<!--              显示choices-->
              <td>{{obj.get_level_display}}</td>
              <td>{{obj.get_status_display}}</td>

              <td>
<!--                Django框架中传递参数的正则表达式-->
              <a class="btn btn-primary btn-xs"  href="/pretty/{{obj.id}}/edit/">编辑</a>
<!--                通过get请求传递参数跳转页面-->
              <a class="btn btn-danger btn-xs" href="/pretty/{{obj.id}}/delete/" >删除</a>
              </td>
          </tr>
          {% endfor %}
        </tbody>
      </table>
    </div>
<!--    分页代码###############################################3-->
     <ul class="pagination">
<!--        <li>-->
<!--          <a href="#" aria-label="Previous"><span aria-hidden="true">«</span>-->
<!--          </a>-->
<!--        </li>-->
<!--        <li><a href="/pretty/list/?page=1">1</a></li>-->
<!--        <li><a href="/pretty/list/?page=2">2</a></li>-->
<!--        <li><a href="/pretty/list/?page=3">3</a></li>-->
<!--        <li><a href="/pretty/list/?page=4">4</a></li>-->
<!--        <li><a href="/pretty/list/?page=5">5</a></li>-->
<!--        <li>-->
            {{page_string}}
<!--        <li>-->
<!--          <a href="#" aria-label="Next"><span aria-hidden="true">»</span>-->
<!--          </a>-->
<!--        </li>-->
      </ul>
      </br>
<!--    页码输入跳转-->
      <form method="get">
          <div class="input-group" style="width: 200px">
              <input type="text" name="page" class="form-comtrol" placeholder="页码">
              <span class="input-group-btn">
                  <button class="btn btn-default" type="submit">跳转</button>
              </span>

          </div>

      </form>


  </div>



{% endblock %}

作者今天写文章,脑子有点乱乱的,有不顺的地方,还请谅解!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608288.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【neteq】tgcall的调用、neteq的创建及接收侧ReceiveStatisticsImpl统计

G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…

MySQL——变量的浮点数问题处理

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL #MySQL变量的浮点数问题处理 set dx3.14,dy3.25; select dxdy;#计算显示异常&#xff0c;会有很多00000的提示set resultdxdy; select result; 查询结果

为何预测预测蛋白质结构这么重要AlphaFold 3;阿里巴巴的开源语音转文字;抱抱脸开源LeRobot

✨ 1: AlphaFold 3 谷歌DeepMind和同构实验室推出AlphaFold 3 AI模型&#xff0c;旨在精确预测生命分子的结构和相互作用。 AlphaFold 3 是由谷歌DeepMind和Isomorphic Labs开发的一款新型AI模型&#xff0c;它可以以前所未有的精确度预测蛋白质、DNA、RNA、配体&#xff08;…

【VTKExamples::Rendering】第一期 TestAmbientSpheres(环境照明系数)

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TestAmbientShperes,介绍环境照明系数对Actor颜色的影响,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动…

C++:重载、重写与重定义

一、重载、重写与重定义的概念 C中&#xff0c;重载、重写和重定义是三个与函数和类成员相关的概念&#xff0c;但它们具有不同的含义和用途。 重载&#xff1a;是指在同一作用域内&#xff0c;可以有多个名称相同但参数列表&#xff08;参数类型、参数个数或参数顺序&#x…

PyCharm安装教程(超详细图文教程)

一、下载和安装 1.进入PyCharm官方下载&#xff0c;官网下载地址&#xff1a; https://www.jetbrains.com/pycharm/download/ 专业版安装插件放网盘了&#xff0c;网盘下载即可&#xff1a;itcxy.xyz/229.html2.安装 1.下载后找到PyCharm安装包&#xff0c;然后双击双击.ex…

网工内推 | 技术支持工程师,最高15k,加班有补贴

01 星网信通 招聘岗位&#xff1a;售前技术支持 职责描述&#xff1a; 1、售前技术支持&#xff1a;技术交流、产品选型报价、方案制作等工作&#xff1b; 2、招投标支持&#xff1a;项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

Linux学习笔记1---Windows上运行Linux

在正点原子的教程中学习linux需要安装虚拟机或者在电脑上安装一个Ubuntu系统&#xff0c;但个人觉得太麻烦了&#xff0c;现在linux之父加入了微软&#xff0c;因此在Windows上也可以运行linux 了。具体方法如下&#xff1a; 一、 在Windows上的设置 在window的搜索框内&#…

vivado 低级别 SVF JTAG 命令、多链 SVF 操作

多链 SVF 操作 以下示例显示了如何在 SVF 链上处理操作。 每个链中连接有 2 个器件 &#xff1a; xcku11 和 xcku9 。配置存储器连接到链中的第 2 个器件 (xcku9) 。为访问此配置存储器 &#xff0c; SVF 会使用 HIR 、 HDR 、 TIR 和 TDR 命令来生成命令。为刷写此…

自动驾驶学习2-毫米波雷达

1、简介 1.1 频段 毫米波波长短、频段宽,比较容易实现窄波束,雷达分辨率高,不易受干扰。波长介于1~10mm的电磁波,频率大致范围是30GHz~300GHz 毫米波雷达是测量被测物体相对距离、相对速度、方位的高精度传感器。 车载毫米波雷达主要有24GHz、60GHz、77GHz、79GHz四个频段。 …

【JavaWeb】Servlet+JSP+EL表达式+JSTL标签库+Filter过滤器+Listener监听器

需要提前准备了哪些技术&#xff0c;接下来的课才能听懂&#xff1f; JavaSE&#xff08;Java语言的标准版&#xff0c;Java提供的最基本的类库&#xff09; Java的开发环境搭建Java的基础语法Java的面向对象数组常用类异常集合多线程IO流反射机制注解Annotation… MySQL&…

守护数字疆域:2024年网络安全报告深度解读

在这个数据如潮涌动的数字时代&#xff0c;每一比特信息都可能是攻防双方角力的战场。《Check Point 2024年网络安全报告》不但为我们揭示了过去一年网络安全世界的风云变幻&#xff0c;更以前瞻性的视角勾勒出未来的挑战与机遇。此刻&#xff0c;让我们携手深潜这份权威指南的…

【智能算法】人工原生动物优化算法(APO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.获取代码 1.背景 2024年&#xff0c;X Wang受到自然界原生动物启发&#xff0c;提出了人工原生动物优化算法&#xff08; Artificial Protozoa Optimizer, APO&#xff09;。 2.算法原理 2.1算法思想 AP…

【比邻智选】MR880A模组

&#x1f680;高性价比&#xff0c;5G/4G双模&#xff0c;稳定可靠 &#x1f310;功能丰富&#xff0c;5G特性一应俱全 &#x1f9e9;多封装兼容&#xff0c;适配性强&#xff0c;灵活升级智能设备

【C语言】内存函数的概念,使用及模拟实现

Tiny Spark get dazzling some day. 目录 1. memcpy-- 函数原型-- 函数使用-- 函数的模拟实现 2.memmove-- 函数原型-- 函数使用-- 函数的模拟实现 3. memset-- 函数原型-- 函数使用-- 函数的模拟实现 4. memcmp-- 函数原型-- 函数使用-- 函数的模拟实现 1. memcpy 使用需包含…

【go项目01_学习记录07】

学习记录 1 创建博文1.1 在main.go中添加路由1.2 构建表单 2 读取表单数据2.1 完善articlesStoreHandler() 函数2.2 修改代码&#xff0c;查看区别 3 表单验证3.1 数据验证3.2 出错提示 1 创建博文 1.1 在main.go中添加路由 访问http://localhost:3000/articles/create 1.2 …

分享几个好用的正规源码交易平台,让开发之路更easy!

在软件开发的世界里&#xff0c;寻找高质量的源码资源对于每一个开发者来说都是至关重要的。它不仅能帮助我们节省大量的开发时间&#xff0c;还能让我们站在巨人的肩膀上&#xff0c;更快地实现项目目标。今天&#xff0c;我就为大家分享几个我亲自使用并觉得非常不错的正规源…

Docker下Open WebUI,Ollama的安装实践

提示一下Open WebUI与ollama的关系。后端的同学可以理解为Open WebUI等于是个Navicat&#xff0c;Ollama就是具体的数据库实例。 官方安装文档&#xff1a; &#x1f3e1; Home | Open WebUI Open WebUI官网文档翻译&#xff1a; 注意&#xff1a; 使用Docker安装Open WebU…

Gradle基础学习(七) 认识插件

Gradle构建在一个插件系统上&#xff0c;本身主要由基础设施组成&#xff0c;比如有一个先进的依赖解析引擎&#xff0c;而其他功能则来自插件。 插件是提供额外功能给Gradle构建系统的软件组件。 插件可以被应用到Gradle构建脚本中&#xff0c;以添加新的任务、配置或其他与构…

C++STL细节,底层实现,面试题04

文章目录 19. STL19.1. 序列容器19.1.1. vector19.1.1.1. 底层实现和特点19.1.1.2. 常用函数19.1.1.3. emplace_back() vs push_back() 19.1.2. array19.1.2.1. 底层实现和特点19.1.2.2. 常用函数 19.1.3. deque19.1.3.1. 底层实现和特点19.1.3.2. 常用函数 19.1.4 list19.1.4.…