首页 > 其他分享 >django-普通分页实现

django-普通分页实现

时间:2023-09-07 22:01:15浏览次数:49  
标签:cur 标签 django 普通 num total 页码 page 分页

views.py 代码:

# 普通分页功能
def person_page(request): # 从 URL 中取出参数 page,这个参数是 “page=1”形式 cur_page_num = request.GET.get('page') # 取得 PrettyNum 模型中的记录总数 total_count = models.PrettyNum.objects.all().count() # 设定每一页显示多少条记录 one_page_lines = 10 # 页面总共展示多少页码标签 page_maxtag = 9 """ 根据总记录数,计算出总的页数 通过 divmod() 函数取得商和余数,有余数时,总页数是商+1 同时判断当前页的页数是否大于总页数,如果大于总页数,设置当前页面等于最后一页的页码 """ total_page, remainder = divmod(total_count, one_page_lines) if remainder: total_page += 1 try: # 参数 page 传递进来的字符类型数值,因此需要转化为整数类型 cur_page_num = int(cur_page_num) # 如果输入的页码超过了最大页码,设置当前页码是最后一页 if cur_page_num > total_page: cur_page_num = total_page except Exception as e: # 当输入的页码不是正整数或者不是数字时,设置当前页数是第一页的页码 cur_page_num = 1 # 定义两个变量,指定表中当前页的记录开始数,以及当前页的记录结束数 rows_start = (cur_page_num - 1) * one_page_lines rows_end = cur_page_num * one_page_lines # 如果页数小于每页设置的页码标签数,设置每页页码标签数为总页数 if total_page < page_maxtag: page_maxtag = total_page # 把当前页码标签放在中间,前面放一半页码标签,后面放一半页码标签 # 因此先把设置的页码标签数除以2 half_page_maxtag = page_maxtag // 2 # 页面上页码标签的开始数 page_start = cur_page_num - half_page_maxtag # 页面下页码标签的开始数 page_end = cur_page_num + half_page_maxtag """ 如果计算出的页码标签开始数小于1,页面中页码标签设置为从1 开始 设置页面中页码标签开始数等于总页数减掉前面设置的页码标签(page_maxtag)加 1 """ if page_end > total_page: page_end = total_page page_start = total_page - page_maxtag + 1 if page_start <= 1: page_start = 1 # 对 模型表中的记录进行切片,取出属于本页的记录 per_list = models.PrettyNum.objects.all()[rows_start:rows_end] # 初始化一个列表变量 html_page = ['<li><a href="/person_page/?page=1">首页</a></li>'] # 首页代码 # 上一页代码标签的 HTML 代码,如果当前是第一页,设置上一页页码标签为非可用状态 if cur_page_num <= 1: html_page.append('<li class="disabled"><a href="#"><span aria-hidden="true">«</span></a></li>'.format( cur_page_num - 1)) else: # 上一页页码标签的 HTMl 代码 html_page.append('<li><a href="/person_page/?page={}"><span aria-hidden="true" >«</span></a></li>'.format( cur_page_num - 1)) # 依次取页码标签,注意切片 函数 for i in range(page_start, page_end + 1): # 如果等于当前页就加一个 active 样式类 if i == cur_page_num: html_temp = '<li class="active"><a href="/person_page/?page={0}">{0}</a></li>'.format(i) else: html_temp = '<li><a href="/person_page/?page={0}">{0}</a></li>'.format(i) html_page.append(html_temp) # 下一页 页码标签的 HTMl 代码 # 判断,如果是最后一页,下一页设置为 disabled if cur_page_num >= total_page: html_page.append('<li class="disabled"><a href="#"><span aria-hidden="true" >»</span></a></li>') else: html_page.append( '<li><a href="/person_page/?page={}"><span aria-hidden="true" >»</span></a></li>'.format( cur_page_num + 1)) # 最后一页页码标签的HTMl 代码 html_page.append('<li><a href="/person_page/?page={}">尾页</a></li>'.format(total_page)) # 把 HTMl 连接起来 page_nav = "".join(html_page) return render(request, 'list.html', {'person_list': per_list, 'page_nav': page_nav})

Html 代码:

<div class="panel panel-default">
        <div class="panel-heading">
            <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
            用户列表
        </div>
        <table class="table table-bordered">
        {% csrf_token %}
            <thead>
                <tr>
                    <td>ID</td>
                    <td>手机号</td>
                    <td>价格</td>
                    <td>级别</td>
                    <td>状态</td>
                    <td>操作</td>
                </tr>
            </thead>
            <tbody>
                {% for pe in person_list %}
                    <tr>
                        <td>{{ pe.id }}</td>
                        <td>{{ pe.mobile }}</td>
                        <td>{{ pe.price }}</td>
                        <td>{{ pe.get_level_display }}</td>
                        <td>{{ pe.get_status_display }}</td>
                      <td>
                            <a class="btn btn-primary btn-xs" href="/pretty_edit/{{ pe.id }}">编辑</a>
                            <a class="btn btn-danger btn-xs" href="/pretty_del/{{ pe.id }}">删除</a>
                        </td>
                    </tr>
            {% endfor %}
            </tbody>
        </table>

    </div>
  <!--分页代码-->
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <!-- 用模板过滤标签,防止对HTMl 代码转义-->
                {{ page_nav|safe }}
            </ul>
        </nav>
</div>

  

 

标签:cur,标签,django,普通,num,total,页码,page,分页
From: https://www.cnblogs.com/p4567/p/17686175.html

相关文章

  • drf—过滤、分页、异常
    session回顾写一个登录接口——保存用户登录状态签发阶段:做了三件事情:1、生成一个随机字符串2、django—session表中插入数据3、把随机字符串以cookie形式返回给前端(存在浏览器的cookie中)认证阶段:前端自动携带cookie到后端,sessionid:随机字符串session的流......
  • drf 分页类
    一、分页类型一1、写一个分页类,继承 PageNumberPaginationweb用这个多http://api.example.org/accounts/?page=4http://api.example.org/accounts/?page=4&page_size=100fromrest_framework.paginationimportPageNumberPagination,LimitOffsetPagination,CursorPagin......
  • django高级
    jwt源码1.jwt详解jwt的全称是jsonwebtoken,一般用于用户认证#jwt的原理是什么?用户在第一次登录的时候,会将用户名、密码等信息传到我们的服务器上进行身份验证,验证成功后,服务器会存在密钥,对用户信息进行加密签发生成jwt,并返回给用户,用户将jwt存储下来,然后在下一次......
  • drf-排序、过滤、分页、异常处理
    一、排序只有5个接口中的查询所有,才涉及到排序,所以继承GenericViewSet, 使用步骤:1.必须写在继承:GenericAPIView类的视图中才行2.配置类属性:filter_backends=[OrderingFilter]ordering_fields=['id','user_type']#可以排序的字段3.使用:......
  • 过滤,分页,异常处理
    1过滤只针对于查询所有接口必须继承GenericAPIView#安装: pipinstalldjango==3.2.12pipinstalldjango-filter#使用方式:三种 -方式一:内置的#查询方式http://127.0.0.1:8000/books/?search=29#模糊匹配:只要名字中有29或价格中有29都能搜......
  • pagehelper分页框架进行定时跑批分页 在插入与sql语句的编写,当插入有库中有报异常显示
    以下是一个示例的业务类,使用PageHelper分页框架进行定时跑批分页插入操作,并在遇到重复数据时跳过继续插入:importcom.github.pagehelper.PageHelper;importcom.github.pagehelper.PageInfo;importorg.springframework.beans.factory.annotation.Autowired;importorg.spring......
  • hibernate设计一棵普通的树
    请设计一个树型结构,完成下列需求:1、 任意一个节点只能有一个(或0个)父节点2、 任意一个节点可以包含多个子节点3、 给定任意一个节点,可以输出这个节点的父节点,以及父节点的父节点,一直到顶级节点,要求输出的时候,从顶级节点开始一直输出到给定的节点为止要求:给出实体类代码、hibe......
  • 内存隔离-分段-分页
    内存隔离程序是运行在内存中,不同程序之间需要做地址隔离,不然恶意程序会修改其他程序的数据,不好的程序会越界修改变量。因此,内存需要对进程进行隔离,让每个进程拥有独立的虚拟空间分段内存映射根据程序所需空间大小,在虚拟内存空间划分出一定的区域大小然后在实际物理内存中......
  • ElasticSearch系列——查询、Python使用、Django/Flask集成、集群搭建,数据分片、位置
    @目录Elasticsearch之-查询一基本查询1.1match查询1.2term查询1.3terms查询1.4控制查询的返回数量(分页)1.5match_all查询1.6match_phrase查询1.7multi_match1.8指定返回的字段1.9sort结果排序1.10range范围查询1.11wildcard查询二组合查询2.1bool查询2.2简单过滤......
  • Django-SQL Injection Vulnerability (CVE-2019-14234)
    复现环境:Vulhub环境启动后,访问http://192.168.80.141:8000即可看到Django默认首页漏洞复现首先登陆后台http://192.168.80.141:8000/admin/,用户名密码为admin、a123123123。登陆后台后,进入模型Collection的管理页面http://192.168.80.141:8000/admin/vuln/collection/:然后......