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

    1. 浏览器手动访问: http://127.0.0.1:8000/host/?page=2

        后端
            Host_list = []
            for i in range(1,100):
                Host_list.append("host%s"%i)
    
    
            def host(request):
    
                current_page = int(request.GET.get("page"))
    
                per_page_count = 10
    
                start = (current_page -1) * per_page_count
                end = current_page * per_page_count
                host_list = Host_list[start:end]
    
    
                return render(request,"host_list.html",{"host_list":host_list})
    
        前端
            <ul>
                {% for item in host_list %}
                    <li>{{ item }}</li>
                {% endfor %}
            </ul>
    View Code

    2. 显示页码

    def host(request):
        try:
            current_page = int(request.GET.get("page"))
        except Exception:
            current_page =1
    
        per_page_count = 10
    
        start = (current_page -1) * per_page_count
        end = current_page * per_page_count
        host_list = Host_list[start:end]
    
    
        #数据总条数
        total_count = len(Host_list)
        #页面显示的最大页码
        max_page_num,div = divmod(total_count,per_page_count)
        if div:
            max_page_num += 1
    
        page_html_list = []
        for i in range(1,max_page_num +1):
            if i == current_page:
                temp = '<a class="active" href="/host/?page=%s">%s</a>'%(i,i)
            else:
                temp = '<a href="/host/?page=%s">%s</a>' % (i, i)
            page_html_list.append(temp)
        page_html = "".join(page_html_list)
    
        return render(request,"host_list.html",{"host_list":host_list,"page_html":page_html})
    Views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .pager a{
                display: inline-block;
                padding: 2px 8px;
                margin: 0 5px;
                border: 1px solid cadetblue;
            }
            .pager a.active{
                background-color: green;
                color: white;
            }
        </style>
    </head>
    <body>
        <ul>
            {% for item in host_list %}
                <li>{{ item }}</li>
            {% endfor %}
        </ul>
        <div class="pager">
            {{ page_html|safe }}
        </div>
    </body>
    </html>
    host_list.html

    3. 显示指定数量的页码

    Host_list = []
    for i in range(1,1000):
        Host_list.append("host%s"%i)
    
    
    
    
    
    def host(request):
        try:
            current_page = int(request.GET.get("page"))
        except Exception:
            current_page =1
    
        per_page_count = 10
    
        start = (current_page -1) * per_page_count
        end = current_page * per_page_count
        host_list = Host_list[start:end]
    
    
        #数据总条数
        total_count = len(Host_list)
        #页面显示的最大页码
        max_page_num,div = divmod(total_count,per_page_count)
        if div:
            max_page_num += 1
    
    
        #页面上默认显示11个页面
        max_page_count = 11
        half_max_page_count = int((max_page_count-1)/2)
    
        page_start = current_page - half_max_page_count
        page_end = current_page + half_max_page_count
    
    
    
        page_html_list = []
        for i in range(page_start,page_end+1):
            if i == current_page:
                temp = '<a class="active" href="/host/?page=%s">%s</a>'%(i,i)
            else:
                temp = '<a href="/host/?page=%s">%s</a>' % (i, i)
            page_html_list.append(temp)
        page_html = "".join(page_html_list)
    
        return render(request,"host_list.html",{"host_list":host_list,"page_html":page_html})
    Views.py

    4. 解决极限的选择 开始页和结尾页

    Host_list = []
    for i in range(1,1000):
        Host_list.append("host%s"%i)
    
    
    
    
    
    def host(request):
        try:
            current_page = int(request.GET.get("page"))
        except Exception:
            current_page =1
    
        per_page_count = 10
    
        start = (current_page -1) * per_page_count
        end = current_page * per_page_count
        host_list = Host_list[start:end]
    
    
        #数据总条数
        total_count = len(Host_list)
        #页面显示的最大页码
        max_page_num,div = divmod(total_count,per_page_count)
        if div:
            max_page_num += 1
    
    
        #页面上默认显示11个页面
        page_count = 11
        half_max_page_count = int((page_count-1)/2)
    
    
        #如果总页数小于显示的页数
        if max_page_num < page_count:
            page_start = 1
            page_end = max_page_num
        else:
            #最左边判断
            if current_page <= half_max_page_count:
                page_start =1
                page_end = page_count
            else:
                #最右边判断
                if (current_page + half_max_page_count) >max_page_num:
                    page_start = max_page_num - page_count + 1
                    page_end = max_page_num
                else:
                    page_start = current_page - half_max_page_count
                    page_end = current_page + half_max_page_count
    
    
    
        page_html_list = []
        for i in range(page_start,page_end+1):
            if i == current_page:
                temp = '<a class="active" href="/host/?page=%s">%s</a>'%(i,i)
            else:
                temp = '<a href="/host/?page=%s">%s</a>' % (i, i)
            page_html_list.append(temp)
        page_html = "".join(page_html_list)
    
        return render(request,"host_list.html",{"host_list":host_list,"page_html":page_html})
    Views.py

    5. 组件 分装为类 

    """
    自定义分页组件的使用方法:
        pager_obj = Pagination(request.GET.get('page',1),len(HOST_LIST),request.path_info)
        host_list = HOST_LIST[pager_obj.start:pager_obj.end]
        html = pager_obj.page_html()
        return render(request,'hosts.html',{'host_list':host_list,"page_html":html})
    """
    
    class Pagination(object):
        """
        自定义分页
        """
        def __init__(self,current_page,total_count,base_url,per_page_count=10,pager_count=11):
            try:
                current_page = int(current_page)
            except Exception as e:
                current_page = 1
            if current_page <=0:
                current_page = 1
            self.current_page = current_page
            # 数据总条数
            self.total_count = total_count
    
            # 每页显示10条数据
            self.per_page_count = per_page_count
    
            # 页面上应该显示的最大页码
            max_page_num, div = divmod(total_count, per_page_count)
            if div:
                max_page_num += 1
            self.max_page_num = max_page_num
    
            # 页面上默认显示11个页面(当前页在中间)
            self.pager_count = pager_count
            self.half_pager_count = int((pager_count - 1) / 2)
    
            # URL前缀
            self.base_url = base_url
        @property
        def start(self):
            return (self.current_page - 1) * self.per_page_count
    
        @property
        def end(self):
            return self.current_page * self.per_page_count
    
        def page_html(self):
            # 如果总页数 <= 11
            if self.max_page_num <= self.pager_count:
                pager_start = 1
                pager_end = self.max_page_num
            # 如果总页数 > 11
            else:
                # 如果当前页 <= 5
                if self.current_page <= self.pager_count:
                    pager_start = 1
                    pager_end = self.pager_count
                else:
                    # 当前页 + 5 > 总页码
                    if (self.current_page + self.pager_count) > self.max_page_num:
                        pager_end = self.max_page_num
                        pager_start = self.max_page_num - self.pager_count + 1
                    else:
                        pager_start = self.current_page - self.pager_count
                        pager_end = self.current_page + self.pager_count
    
            page_html_list = []
            first_page = '<a href="/host/?page=1">首页</a>'
            page_html_list.append(first_page)
            for i in range(pager_start, pager_end + 1):
                if i == self.current_page:
                    temp = '<a class="active" href="%s?page=%s">%s</a>' % (self.base_url,i, i,)
                else:
                    temp = '<a href="%s?page=%s">%s</a>' % (self.base_url,i, i,)
                page_html_list.append(temp)
            end_page = '<a href="/host/?page=%s">尾页</a>' % self.max_page_num
            page_html_list.append(end_page)
    
            return ''.join(page_html_list)
    View Code

    6. 保留原搜索条件

    保留原搜索条件
        1. 方式一:
            - 缺点: 列表页面跳到编辑页面除了加列表页面的参数外 还增加了编辑页面的参数 再次返回列表页面获取到的参数无法确认哪些时列表页面的参数
    
            - 列表页面
                - 获取当前url的参数request.GET.urlencode()
                - 增加到 编辑按钮URL的后面
                - 增加到 增加按钮URL的后面
            - 编辑 增加 页面提交
                - POST提交时 获取原来列表页面传过来的条件request.GET.urlencode()
                - 拼接URL /host/?原来的条件
            
            list页面:
    
                list_condition = request.GET.urlencode()
    
                {% for item in host_list %}
                    <li>{{ item }} <a href="/edit/54/?{{ list_condition }}">编辑</a></li>
                {% endfor %}
        
            add/edit页面:http://127.0.0.1:8000/edit/10/?page=5&id__gt=4
    
                def edit_host(request,pk):
                    if request.method == "GET":
                        return render(request,'edit_host.html')
                    else:
                        # 修改成功 /hosts/?page=5&id__gt=4
                        url = "/hosts/?%s" %(request.GET.urlencode())
                        return redirect(url)
    
        2. 方式二:
            - 把列表页面的参数打包 赋值一个key _list_file = "page=15"
            - 列表页面
                - form django.http import QueryDict
                params = QueryDict(mutable=True)
                params['_list_filter'] = request.GET.urlencode()
                list_codition = params.urlencode()
                把list_codition传给编辑的值
            - 编辑页面
                url = request.GET.get("_list_filter")
                return redict(url)
    
            list页面: http://127.0.0.1:8000/hosts/?page=5&id__gt=4
                
                params = QueryDict(mutable=True)
                params['_list_filter'] = request.GET.urlencode()
                list_condition = params.urlencode()
                
                
                {% for item in host_list %}
                    <li>{{ item }} <a href="/edit/54/?{{ list_condition }}">编辑</a></li>
                {% endfor %}
        
            add/edit页面:http://127.0.0.1:8000/edit/54/?_list_filter=page%3D5%26id__gt%3D4
                    
                def edit_host(request,pk):
                if request.method == "GET":
                    return render(request,'edit_host.html')
                else:
                    # 修改成功 /hosts/?page=5&id__gt=4
                    url = "/hosts/?%s" %(request.GET.get('_list_filter'))
                    return redirect(url)

     7. 之后调分页

    current_page = request.GET.get('page', 1)
    total_count = self.model_class.objects.all().count()
    base_url = request.path_info
     
    page_list = Pagination(current_page, total_count, base_url, request.GET, per_page_count=2, pager_count=5)
    html = page_list.page_html()
    data_list = self.model_class.objects.all()[page_list.start:page_list.end]
     
    return render(request, 'stark/changelist.html',
                  {'data_list': data_list, 'head_list': head_list, " "page_html": html})
    <nav aria-label="Page navigation" class="pull-right" > <ul class="pagination"> {{ page_html|safe }} </ul> </nav>
    """
    自定义分页组件的使用方法:
        pager_obj = Pagination(request.GET.get('page',1),len(HOST_LIST),request.path_info,request.GET)
        host_list = HOST_LIST[pager_obj.start:pager_obj.end]
        html = pager_obj.page_html()
        return render(request,'hosts.html',{'host_list':host_list,"page_html":html})
    """
    
    class Pagination(object):
        """
        自定义分页
        """
        def __init__(self,current_page,total_count,base_url,pamams,per_page_count=10,pager_count=11):
            try:
                current_page = int(current_page)
            except Exception as e:
                current_page = 1
            if current_page <=0:
                current_page = 1
            self.current_page = current_page
            # 数据总条数
            self.total_count = total_count
    
            # 每页显示10条数据
            self.per_page_count = per_page_count
    
            # 页面上应该显示的最大页码
            max_page_num, div = divmod(total_count, per_page_count)
            if div:
                max_page_num += 1
            self.max_page_num = max_page_num
    
            # 页面上默认显示11个页面(当前页在中间)
            self.pager_count = pager_count
            self.half_pager_count = int((pager_count - 1) / 2)
    
            # URL前缀
            self.base_url = base_url
    
    
            import copy
            pamams = copy.deepcopy(pamams)
            pamams._mutable = True
            self.pamams = pamams
    
        @property
        def start(self):
            return (self.current_page - 1) * self.per_page_count
    
        @property
        def end(self):
            return self.current_page * self.per_page_count
    
        def page_html(self):
            # 如果总页数 <= 11
            if self.max_page_num <= self.pager_count:
                pager_start = 1
                pager_end = self.max_page_num
            # 如果总页数 > 11
            else:
                # 如果当前页 <= 5
                if self.current_page <= self.pager_count:
                    pager_start = 1
                    pager_end = self.pager_count
                else:
                    # 当前页 + 5 > 总页码
                    if (self.current_page + self.pager_count) > self.max_page_num:
                        pager_end = self.max_page_num
                        pager_start = self.max_page_num - self.pager_count + 1
                    else:
                        pager_start = self.current_page - self.pager_count
                        pager_end = self.current_page + self.pager_count
    
            page_html_list = []
            self.pamams['page'] = 1
            first_page = '<li><a href="%s?%s">首页</a></li>'%(self.base_url,self.pamams.urlencode())
            page_html_list.append(first_page)
            for i in range(pager_start, pager_end + 1):
                self.pamams['page'] = i
                if i == self.current_page:
                    temp = '<li class="active"><a href="%s?%s">%s</a></li>' % (self.base_url,self.pamams.urlencode(), i,)
                else:
                    temp = '<li><a href="%s?%s">%s</a></li>' % (self.base_url,self.pamams.urlencode(), i,)
                page_html_list.append(temp)
    
            #尾页
            self.pamams['page'] = self.max_page_num
            end_page = '<li><a href="%s?%s">尾页</a></li>' % (self.base_url,self.pamams.urlencode(),)
            page_html_list.append(end_page)
    
            return ''.join(page_html_list)
    page.py

     

     

  • 相关阅读:
    out/host/linuxx86/obj/EXECUTABLES/aapt_intermediates/aapt 64 32 操作系统
    linux 查看路由器 电脑主机 端口号 占用
    linux proc进程 pid stat statm status id 目录 解析 内存使用
    linux vim 设置大全详解
    ubuntu subclipse svn no libsvnjavahl1 in java.library.path no svnjavahl1 in java.library.path no s
    win7 安装 ubuntu 双系统 详解 easybcd 工具 不能进入 ubuntu 界面
    Atitit.json xml 序列化循环引用解决方案json
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.跨语言  文件夹与文件的io操作集合  草案
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/golangav/p/8058376.html
Copyright © 2011-2022 走看看