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

django-普通分页

时间:2023-09-07 22:33:53浏览次数:30  
标签:cur html 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
    """
    if page_start <=1:
        page_start =1
        page_end=page_maxtag
    """
    如果计算出的页码标签数比总页码数大,设置最后的页码标签数为总页数
    设置页面中页码开始数等于总页数减去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
    # 对PrettyNum表中的记录进行切片,取出属于本页的记录
    per_list = models.PrettyNum.objects.all()[rows_start:rows_end]
    # 初始化一个列表变量,用来保存拼接分页的HTML代码
    html_page = []
    # 首页代码
    html_page.append('<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,html,django,普通,num,total,页码,page,分页
From: https://www.cnblogs.com/p4567/p/17686271.html

相关文章

  • 在代码中配置乐观锁插件和分页插件
    在代码中配置乐观锁插件和分页插件在代码中配置乐观锁插件和分页插件,您可以按照以下步骤进行操作:配置乐观锁插件:乐观锁插件是MyBatisPlus提供的功能之一,您可以在配置类中进行配置。假设您使用的是SpringBoot,可以创建一个配置类(如MyBatisConfig)并添加@Configuration注解,......
  • django-普通分页实现
    views.py代码:#普通分页功能defperson_page(request):#从URL中取出参数page,这个参数是“page=1”形式cur_page_num=request.GET.get('page')#取得PrettyNum模型中的记录总数total_count=models.PrettyNum.objects.all().count()#设定每......
  • 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......
  • 内存隔离-分段-分页
    内存隔离程序是运行在内存中,不同程序之间需要做地址隔离,不然恶意程序会修改其他程序的数据,不好的程序会越界修改变量。因此,内存需要对进程进行隔离,让每个进程拥有独立的虚拟空间分段内存映射根据程序所需空间大小,在虚拟内存空间划分出一定的区域大小然后在实际物理内存中......