zoukankan      html  css  js  c++  java
  • Django分页(二)

    Django分页(二)

    要求

    # 1、设定每页显示数据条数
    #
    # 2、用户输入页码(第一页、第二页...)
    #
    # 3、设定显示多少页号
    #
    # 4、获取当前数据总条数
    #
    # 5、根据设定显示多少页号和数据总条数计算出,总页数
    #
    # 6、根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置
    #
    # 7、在数据表中根据起始位置取值,页面上输出数据
    #
    # 8、输出分页html,如:[上一页][1][2][3][4][5][下一页]

    具体实现效果

    css样式可以自行修改

    示例

    页面具体处理

    # 参数:
    #数据总个数
    #当前页
    #每页显示多少条数据
    #最多每页多个页号
    
    class PageInfo(object):
        def __init__(self,totalCount,current,totalItem=12,peritems=10):
            #数据总个数
            self._count=totalCount
            #当前页
            try:
    
                v=int(current)
                if v<=0:
                    v=1
                self.__current=v
            except Exception as e:
                self.__current = 1
            #每页显示的行数
            self.__totalItem=totalItem
            #最多显示页面
            self.__peritems = peritems
    
    
    #设置一页数据的开始和结束
    #数据开始的页数
        def start(self):
            return (self.__current-1)*self.__totalItem
    #数据结束的页数
        def end(self):
            return self.__current*self.__totalItem
    
    #求出总页数
        @property
        def num_pages(self):
    
            a,b=divmod(self._count,self.__totalItem)
            # print(a,b)
            if b==0:
                return a
            return a+1
    
    #生成所有的页号
        def page_num_range(self):
            # 当前页面
            # self.current_page
            # 总页数
            # self.num_pages
            # 最多显示的页码个数
            # self.max_pager_num
            if self.num_pages <  self.__peritems:
                return range(1, self.num_pages + 1)
            part = int(  self.__peritems/ 2)
            if self.__current - part < 1:
                return range(1,  self.__peritems + 1)
            if self.__current + part > self.num_pages:
                return range(self.num_pages + 1 -  self.__peritems, self.num_pages + 1)
            return range(self.__current - part, self.__current + part + 1)
    #所有的a标签
        def page_str(self):
    
            #用来存放所有页号a标签
            page_list=[]
    
            #首页
            head_page="<a href='/index3?p=1'>首页</a>"
            page_list.append(head_page)
    
            #上一页
            print(self.__current)
            if self.__current ==1:
    
                prev="<a href='#'><<</a>"
            else:
                prev="<a href='/index3?p=%s'><<</a>"%(self.__current-1)
    
            page_list.append(prev)
            for i in self.page_num_range():
                if i==self.__current:
                    temp="<a style='font-size:30px;' href='/index3?p=%s'>%s</a>"%(i,i)
                else:
                    temp="<a href='/index3?p=%s'>%s</a>"%(i,i)
                page_list.append(temp)
    
            #下一页
            if self.__current==self.num_pages:
                next = "<a href='#'>>></a>"
            else:
                next = "<a href='/index3?p=%s'>>></a>" % (self.__current + 1)
    
            page_list.append(next)
    
            # 尾页
            b_page="<a href='/index3?p=%s'>尾页</a>"%( self.num_pages)
            page_list.append(b_page)
            return ''.join(page_list)
    View Code

    视图函数

    from django.shortcuts import render,HttpResponse,redirect
    from blog.models import *
    from blog import pager
    # Create your views here.
    USER_LIST=[]
    for i in range(666):
        temp={'name':'root'+str(i),'age':i}
        USER_LIST.append(temp)
    
    def get_index3(request):
        current_page=request.GET.get('p')
        
        #初始化页面处理的对象,有两个参数在初始化函数里,设置了默认数值
        page_obj=pager.PageInfo(666,current_page)
        
        #对数据进行切片
        data_list=USER_LIST[page_obj.start():page_obj.end()]
    
        return render(request,"index3.html",{'data_list':data_list,"page_obj":page_obj})
    View Code

    HTML

    注意:safe在这里的作用。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            a{
          border-style: solid ;
          }
    
        </style>
    </head>
    <body>
    <div class="header">
        <div>
            {% for user in data_list %}
                <li>{{ user.name }} {{ user.age }} </li>
            {% endfor %}
          <br>
            {{ page_obj.page_str | safe }}
        </div>
    
    </div>
    </body>
    </html>
    View Code
  • 相关阅读:
    .net 面试题 没事多看看。。。。
    分享一下我记忆23种设计模式的方法 <转。。>
    再次写给我们这些浮躁的程序员 《搜集的。。。》
    C#验证邮箱,电话,手机,数字,英文,日期,身份证,邮编,网址,IP类.. (转后整理)
    javascript和jquery使用技巧集
    jQuery 增加 删除 修改select option .
    设计模式(二)
    JavaScript string 字符串类型的扩展方法
    26个jQuery使用技巧
    jBPM开发入门指南(1)
  • 原文地址:https://www.cnblogs.com/-wenli/p/10459932.html
Copyright © 2011-2022 走看看