zoukankan      html  css  js  c++  java
  • Django 自定义分页

    Django 自定义分页

    定一个一个类

    # 说明 
    #1.通过传入对应的参数,自动生成html标签代码 ,并返回,前段只需接收并渲染显示即可
    #2.请注意标签内的网址接口,如更改,请修改对应的值
    
    
    class PageInfo:
        def __init__(self, cur_page, total, per_page=10, show_page=11):
            self.cur_page = cur_page
            self.per_page = per_page
            self.total = total
            self.show_page = show_page
    
            a, b = divmod(self.total, self.per_page)
            if b:
                a = a + 1
            self.total_page = a  #### 总页数
    
        #### 获取起始索引
        def get_start(self):
            start = (self.cur_page - 1) * self.per_page
            return start
    
        #### 获取结束索引
        def get_end(self):
            return self.cur_page * self.per_page
    
        def get_page(self):
    
            half = (self.show_page - 1) // 2
    
            #### taotal_page = 5 < show_page = 11
            if self.total_page < self.show_page:
                begin = 1
                end = self.total_page
            else:
                #### 左边极值判断
                if self.cur_page - half <= 0:
                    begin = 1
                    # end = self.cur_page + half
                    end = self.show_page
                #### 右边极值的判断
                elif self.cur_page + half > self.total_page:
                    # begin =  self.cur_page - half
                    begin = self.total_page - self.show_page + 1
                    end = self.total_page  ### 31
                #### 正常页码判断
                else:
                    begin = self.cur_page - half
                    end = self.cur_page + half
    
            page_list = []
            if self.cur_page == 1:
                astr = "<li><a href='#' aria-label='Previous'><span aria-hidden='true'>&laquo;</span></a></li>"
            else:
                astr = "<li><a href='/classes/?cur_page=%s' aria-label='Previous'><span aria-hidden='true'>&laquo;</span></a></li>" % (
                        self.cur_page - 1)
            page_list.append(astr)
    
            for i in range(begin, end + 1):
                if self.cur_page == i:
                    # astr = "<a style='display:inline-block; padding:5px;margin:5px;background-color:red;' href='/custom/?cur_page=%s'>%s</a>" % (i, i)
                    astr = "<li class='active'><a href='/classes/?cur_page=%s'>%s</a></li>" % (i, i)
                else:
                    # astr = "<a style='display:inline-block; padding:5px;margin:5px' href='/custom/?cur_page=%s'>%s</a>" % (i, i)
                    astr = "<li><a href='/classes/?cur_page=%s'>%s</a></li>" % (i, i)
                page_list.append(astr)
    
            if self.cur_page == self.total_page:
                astr = "<li><a href='#' aria-label='Next'><span aria-hidden='true'>&raquo;</span></a></li>"
            else:
                astr = "<li><a href='/classes/?cur_page=%s' aria-label='Next'><span aria-hidden='true'>&raquo;</span></a></li>" % (
                        self.cur_page + 1)
            page_list.append(astr)
    
            s = " ".join(page_list)
    
            return s
    

    定义一个函数来实现类的使用

    
    
    def classes(request):
        if request.method == 'GET':
            cur_page = request.GET.get('cur_page')  #首先获取前端传来的url参数
            if not cur_page:      # 有的是直接传过来一个没有参数的 ,我们默认给他一个第一页
                cur_page = 1
    
            cur_page = int(cur_page)   #因为传过来的是一个文本类型,要转换成整型
            res = models.Classes.objects.all()  #连接数据库,获取全部信息
            total = models.Classes.objects.count() #连接数据库获取数据库总数量
            page = PageInfo(cur_page, total) #实例化上边的类
            start = page.get_start() #通过类获取起始页
            end = page.get_end() #通过类获取结束页
    
            user_list = models.Classes.objects.all()[start:end] #连接数据库通过获取指定范围的数据,相当于原生SQL的limit
    
            return render(request, "classes.html", {'classes': res, "user_list": user_list, "page": page})  #最后将获取的数据一并发给前段
       
    

    前段渲染实现方式

    //说明: 使用了bootstrap美化,
    
        <table border="1px" class="table table-bordered table-hover table-striped">
            <thead>    //标题头
            <tr>
                <th>ID</th>   
                <th>班级名称</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            {% for item in user_list %}  //这里是渲染后端传来的分页后的数据
                <tr>
    
                    <td>{{ item.cid }}</td>
                    <td>{{ item.cname }}</td>
                    <td>
    
    
    					//这段代码可以忽略
                        <a href="/del_classes/?cid={{ item.cid }}" class="dele  btn btn-danger">删除</a>
                        <a href="/up_class/?cid={{ item.cid }}" class="btn btn-info">更新</a>
                        <button class="ajax_up btn btn-success">ajax更新</button>
                       
                    </td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
    	
    
        <nav aria-label="Page navigation">
          <ul class="pagination">
              {{ page.get_page | safe}}  //这里显示的是分页导航栏,也就是有多少页 分出多少个按钮
          </ul>
        </nav>
    
    
    
  • 相关阅读:
    NDK开发一
    【转】Android NDK学习(2)Windows下NDK开发环境配置
    【转】Android NDK学习(3)使用Javah命令生成JNI头文件 .
    IDA 动态调试so
    Scrapy下载中间件的优先级(神踏马值越小优先级越高)
    二、深入asyncio协程(任务对象,协程调用原理,协程并发)
    python 可迭代对象,迭代器,生成器的区别及使用
    一、初识asyncio协程
    python多进程,进程池,数据共享,进程通信,分布式进程
    Scrapy的Request和Response对象
  • 原文地址:https://www.cnblogs.com/bladecheng/p/11359085.html
Copyright © 2011-2022 走看看