• Django-自定义分页组件


    1.封装的分页代码:

    class PageInfo(object):
        def __init__(self,current_page,all_count,per_page,base_url,show_page=7):
            '''
    
            :param current_page: 当前页面
            :param all_count: 总行数
            :param per_page: 每页显示的行数
            :param base_url: 要跳转的url
            :param shpw_page: 显示多少个页面,默认为7
            '''
            try:
                #当前页面
                self.current_page = int(current_page)
            except Exception as e:
                #出错就让当前页=1
                self.current_page =1
    
            #每页显示的行数
            self.per_page = per_page
    
            #内置函数,总行数,每页的行数= 整数,余数
            a,b = divmod(all_count,per_page)
    
            #b:余数。如果是有数即True
            if b:
                #有余数就在总页数上+1
                a +=1
            #总页数
            self.all_pager = a
            #显示的页码数
            self.show_page = show_page
    
            #跳转的url,可以供不同的功能,如:学生管理,老师管理.....等
            self.base_url = base_url
        #起始函数
        def start(self):
            #(当前页 - 1) * 每页行数
            return (self.current_page - 1) * self.per_page
    
        #结束函数
        def end(self):
            #当前页*页面行数
            return self.current_page * self.per_page
    
    
        def pager(self):
            #存放页码
            page_list = []
    
            #当前页面中显示的页码-1/2,左右显示的数量
            half = int((self.show_page-1)/2)
    
            #如果数据总页数<7
            if self.all_pager < self.show_page:
                #重新设定起始值和结束值
                begin = 1
                stop = self.all_pager +1
            # 如果数据总页数>7
            else:
                #如果当前页 <= 3 ,永远显示1,7
                if self.current_page  <= half:
                    begin = 1
                    stop = self.show_page + 1
                else:
                    #当前页 + 3 > 总页数
                    if self.current_page + half > self.all_pager:
                        #总页数 - 显示的页数 + 1
                        begin = self.all_pager - self.show_page + 1
                        #总页数 + 1
                        stop = self.all_pager + 1
                    # 当前页 + 3 < 总页数
                    else:
                        #当前页码 - 3
                        begin = self.current_page - half
                        #当前页码 + 3 + 1
                        stop = self.current_page + half + 1
            #当前页码<=1,就让当前的上一页刷新当前页面
            if self.current_page <= 1:
                # prev = '<li><a href="#">上一页</a></li>'
                #如果是1,就让上一页消失
                 prev = ''
            #当前页码>1,就让当前的上一页加1,持续进行分页操作
            else:
                prev = '<li><a href="%s?page=%s">上一页</a></li>'%(self.base_url,self.current_page-1,)
            #将页码存入到list中
            page_list.append(prev)
    
            #遍历页码,起始值————结束值
            for i in range(begin,stop):
                #i == 当前的页码
                if i == self.current_page:
                    #就给当前的页码添加一个样式,以便区分当前选中的页码是多少
                    temp = '<li class="active" ><a href="%s?page=%s">%s</a></li>'%(self.base_url,i,i,)
                # i != 当前的页码
                else:
                    #就不管
                    temp = '<li><a href="%s?page=%s">%s</a></li>'%(self.base_url,i,i,)
                page_list.append(temp)
            #当前页大于总页数
            if self.current_page >= self.all_pager:
                # nex = '<li><a href="#">下一页</a></li>'
                nex = ''
            # 当前页小于总页数
            else:
                #每点击下一页进行加1
                nex = '<li><a href="%s?page=%s">下一页</a></li>'%(self.base_url,self.current_page + 1,)
            #添加到list中
            page_list.append(nex)
            #字符串拼接
            return ''.join(page_list)

    2.调用分页的函数:views.py中

    #运行的函数
    def custom(request):
        #总行数
        all_count = models.UserInfo.objects.all().count()
    
        #调用分页的class,并实例化对象。当前页码|总页码数|每页显示的行数|跳转的url
        page_info = PageInfo(request.GET.get('page'),all_count,10,'/custom.html')
        #拿到我所有的数据
        user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
    
        return render(request,'custom.html',locals())

    3.路由系统:urls.py

    url(r'^custom.html$', views.custom),

    4.html中的代码 :使用了bootstrap中的分页组件样式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/css/bootstrap.min.css" />
    </head>
    <body>
        <h1>用户表</h1>
        <ul>
            {% for row in user_list %}
                <li>{{ row.name }}|{{ row.age }}|{{ row.ug.title }}</li>
            {% endfor %}
    
        </ul>
    {#    使用的bootstrap中的组件#}
    <nav aria-label="Page navigation">
      <ul class="pagination">
    {#      page_info.pager|safe:显示我定义好的pager函数,并且使用模板中的safe方法,让在后端写的标签生效,不写safe,那么前端页面原样输出我写的标签#}
        {{ page_info.pager|safe }}
      </ul>
    </nav>
    </body>
    </html>
  • 相关阅读:
    java程序打包成jar 配置文件信息路径
    django 认证系统
    django 表单验证和字段验证
    python 面向对象编程
    Python new() 方法
    Django 分页 以及自定义分页
    django 自己编写admin
    Django CRM客户关系管理系统
    Django model中的 class Meta 详解
    Django CRM系统
  • 原文地址:https://www.cnblogs.com/bingabcd/p/7275682.html
Copyright © 2020-2023  润新知