• django框架下的分页_django


    一、分页(函数)

    views:

     1 def host_list(request):
     2     #生成主机数据
     3     hosts=[]
     4     for i in range(1,254):
     5         temp="192.168.1."+str(i)
     6         hosts.append(temp)
     7 
     8     #根据每页数据量和当前页码对主机数据进行切片
     9     per_page_count=10
    10     current_page=int(request.GET.get("p",1))
    11     host_list=hosts[(current_page-1)*per_page_count:current_page*per_page_count]
    12 
    13     #生成页码
    14     total_count=len(hosts)
    15     v,y=divmod(total_count,per_page_count)
    16     if y:
    17         v=v+1
    18     total_page=v
    19     tags=[]
    20 
    21     #上一页
    22     prev='<a href="/host_list/?p=%s">上一页</a>'%(current_page-1)
    23     if current_page==1:
    24         prev='<a href="#">上一页</a>'
    25     tags.append(prev)
    26     #所有页码
    27     pager_num=7  #显示多少个页码
    28     if current_page<pager_num/2+1:
    29         start_page=1
    30         end_page=pager_num+2
    31     elif current_page>total_page-pager_num/2:
    32         start_page = total_page-pager_num
    33         end_page = total_page+1
    34     else:
    35         start_page=current_page-pager_num/2
    36         end_page=current_page+pager_num/2+1
    37     start_page=int(start_page)
    38     end_page=int(end_page)
    39     for i in range(start_page,end_page):
    40         temp='<a href="/host_list/?p=%s">%s</a>'%(i,i)
    41         tags.append(temp)
    42     #下一页
    43     next='<a href="/host_list/?p=%s">下一页</a>'%(current_page+1)
    44     if current_page==total_page:
    45         next='<a href="#">下一页</a>'
    46     tags.append(next)
    47     #页面跳转
    48     jump='''
    49         <div>
    50             <input type="text" id="i1">
    51             <a   onclick="jumpTo(this,'/host_list/?p=')">Go</a>
    52         </div>
    53     <script>
    54         function jumpTo(ths,base) {
    55             var val=document.getElementById("i1").value;
    56             location.href=base+val
    57         }
    58     </script>
    59     '''
    60     tags.append(jump)
    61     return render(request,"host_list.html",{"host_list":host_list,"tags":tags})
    views

    html:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>主机页面</title>
     6 </head>
     7 <body>
     8     <table border="1">
     9         <thead>
    10             <tr>
    11                 <th>主机</th>
    12             </tr>
    13         </thead>
    14         <tbody>
    15             {% for host in host_list %}
    16             <tr>
    17                 <td>{{ host }}</td>
    18             </tr>
    19             {% endfor %}
    20         </tbody>
    21     </table>
    22 
    23         {% for tag in tags %}
    24         <span>{{ tag|safe }}</span>
    25         {% endfor %}
    26 
    27 
    28 </body>
    29 </html>
    html

    二、封装成类使用:

    Page:

    class Page:
        def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):
            self.current_page = current_page
            self.data_count = data_count
            self.per_page_count = per_page_count
            self.pager_num = pager_num
    
        @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
    
    
        @property
        def total_page(self):
            v, y = divmod(self.data_count, self.per_page_count)
            if y:
                v = v + 1
            return v
    
    
        def tags(self, base_url):
            tags = []
    
            # 上一页
            prev = '<a href="%s?p=%s">上一页</a>' % (base_url, self.current_page - 1)
            if self.current_page == 1:
                prev = '<a href="#">上一页</a>'
            tags.append(prev)
            # 所有页码
    
            pager_num = 7  # 显示多少个页码
            #如果页数大于7:
            if self.total_page>=7:
                if self.current_page < pager_num / 2 + 1:
                    start_page = 1
                    end_page = pager_num + 1
                elif self.current_page > self.total_page - pager_num / 2:
                    start_page = self.total_page - pager_num
                    end_page = self.total_page + 1
                else:
                    start_page = self.current_page - pager_num / 2
                    end_page = self.current_page + pager_num / 2 + 1
            else:#如果页数小于7
                start_page=1
                end_page=self.total_page+1
            start_page = int(start_page)
            end_page = int(end_page)
            for i in range(start_page, end_page):
                temp = '<a href="%s?p=%s">%s</a>' % (base_url, i, i)
                if i==self.current_page:
                    temp = '<a href="%s?p=%s" class="high_light">%s</a>' % (base_url, i, i)
                tags.append(temp)
            # 下一页
            next = '<a href="%s?p=%s">下一页</a>' % (base_url, self.current_page + 1)
            if self.current_page == self.total_page:
                next = '<a href="#">下一页</a>'
            tags.append(next)
            # 页面跳转
            jump = '''
                         <div>
                             <input type="text" id="i1">
                             <a   onclick="jumpTo(this,'%s?p=')">跳转</a>
                         </div>
                     <script>
                         function jumpTo(ths,base) {
                             var val=document.getElementById("i1").value;
                             console.log(val)
                             location.href=base+val
                         }
                     </script>
                     ''' % base_url
            tags.append(jump)
            return tags
    View Code

    使用:

     1 def host_list(request):
     2     #伪造主机数据
     3     hosts=[]
     4     for i in range(1,254):
     5         temp="192.168.1."+str(i)
     6         hosts.append(temp)
     7 
     8     #根据每页数据量和当前页码对主机数据进行切片
     9     per_page_count=10 #每页显示个数
    10     pager_num = 7  # 显示多少个页码
    11     current_page=int(request.GET.get("p",1))
    12     obj=Page(current_page=current_page,data_count=len(hosts),per_page_count=per_page_count,pager_num=pager_num)
    13     host_list = hosts[obj.start:obj.end]
    14 
    15     #生成页码
    16     tags=obj.tags("/host_list/")
    17 
    18     return render(request,"host_list.html",{"host_list":host_list,"tags":tags})
    View Code
     
  • 相关阅读:
    NYOJ47 过河问题
    CodeForces1165
    LuoGuP3667
    ZROI#958
    ZROI#957
    KMP小结
    LuoGuP2742[模板]二维凸包
    ZROI#999
    ZROI#997
    ZROI#996
  • 原文地址:https://www.cnblogs.com/chenxiaozan/p/13063194.html
Copyright © 2020-2023  润新知