zoukankan      html  css  js  c++  java
  • 自定义分页与保存搜索条件

      1 """
      2 分页组件使用示例:
      3 
      4     obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.path_info)
      5     page_user_list = USER_LIST[obj.start:obj.end]
      6     page_html = obj.page_html()
      7 
      8     return render(request,'index.html',{'users':page_user_list,'page_html':page_html})
      9 
     10 
     11 """
     12 
     13 
     14 class Pagination(object):
     15 
     16     def __init__(self,current_page,all_count,request,per_page_num=2,pager_count=11):
     17         """
     18         封装分页相关数据
     19         :param current_page: 当前页
     20         :param all_count:    数据库中的数据总条数
     21         :param per_page_num: 每页显示的数据条数
     22         :param pager_count:  最多显示的页码个数
     23         """
     24 
     25         try:
     26             current_page = int(current_page)
     27         except Exception as e:
     28             current_page = 1
     29 
     30         if current_page <1:
     31             current_page = 1
     32 
     33         self.current_page = current_page
     34 
     35         self.all_count = all_count
     36         self.per_page_num = per_page_num
     37 
     38 
     39         # 总页码
     40         all_pager, tmp = divmod(all_count, per_page_num)
     41         if tmp:
     42             all_pager += 1
     43         self.all_pager = all_pager
     44 
     45 
     46         self.pager_count = pager_count
     47         self.pager_count_half = int((pager_count - 1) / 2)
     48 
     49         # 保存搜索条件
     50         import copy
     51         self.params = copy.deepcopy(request.GET)
     52 
     53     @property
     54     def start(self):
     55         return (self.current_page - 1) * self.per_page_num
     56 
     57     @property
     58     def end(self):
     59         return self.current_page * self.per_page_num
     60 
     61     def page_html(self):
     62         # 如果总页码 < 11个:
     63         if self.all_pager <= self.pager_count:
     64             pager_start = 1
     65             pager_end = self.all_pager + 1
     66         # 总页码  > 11
     67         else:
     68             # 当前页如果<=页面上最多显示11/2个页码
     69             if self.current_page <= self.pager_count_half:
     70                 pager_start = 1
     71                 pager_end = self.pager_count + 1
     72 
     73             # 当前页大于5
     74             else:
     75                 # 页码翻到最后
     76                 if (self.current_page + self.pager_count_half) > self.all_pager:
     77                     pager_end = self.all_pager + 1
     78                     pager_start = self.all_pager - self.pager_count + 1
     79                 else:
     80                     pager_start = self.current_page - self.pager_count_half
     81                     pager_end = self.current_page + self.pager_count_half + 1
     82 
     83         page_html_list = []
     84 
     85         first_page = '<li><a href="?page=%s">首页</a></li>' % (1,)
     86         page_html_list.append(first_page)
     87 
     88         if self.current_page <= 1:
     89             prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
     90         else:
     91             prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)
     92 
     93         page_html_list.append(prev_page)
     94 
     95         for i in range(pager_start, pager_end):
     96             self.params['page'] = i
     97             if i == self.current_page:
     98                 temp = '<li class="active"><a href="?%s">%s</a></li>' % (self.params.urlencode(), i,)
     99             else:
    100                 temp = '<li><a href="?%s">%s</a></li>' % (self.params.urlencode(), i,)
    101             page_html_list.append(temp)
    102 
    103         if self.current_page >= self.all_pager:
    104             next_page = '<li class="disabled"><a href="#">下一页</a></li>'
    105         else:
    106             next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)
    107         page_html_list.append(next_page)
    108 
    109         last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
    110         page_html_list.append(last_page)
    111 
    112         return ''.join(page_html_list)
    page.py
     1 from django.shortcuts import render,HttpResponse
     2 from app01 import models
     3 
     4 # Create your views here.
     5 def index(request):
     6     # li = []
     7     # for i in range(100):
     8     #     li.append(models.Book(name="图书%s"%i,price=10+i))
     9     # models.Book.objects.bulk_create(li)
    10     # return HttpResponse('ok')
    11     from app01.page import Pagination
    12     current_page_num=request.GET.get('page',1)
    13     book_list = models.Book.objects.all()
    14     pagination=Pagination(current_page_num,book_list.count(),request)
    15     book_list=book_list[pagination.start:pagination.end]
    16     return render(request,'index.html',locals())
    views.py
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
     7 </head>
     8 <body>
     9 <ul>
    10     {% for book in book_list %}
    11     <li>{{ book.name }}---{{ book.price }}</li>
    12     {% endfor %}
    13 </ul>
    14 <nav aria-label="Page navigation">
    15   <ul class="pagination">
    16     {{ pagination.page_html|safe }}
    17   </ul>
    18 </nav>
    19 
    20 </body>
    21 </html>
    index.html
  • 相关阅读:
    CString常用方法简介
    @PostConstruct与@PreDestroy
    Servlet知识
    Extjs ——radiogroup子元素宽度调整
    JS的Document属性和方法
    sql server
    C#中的结构,练习
    datagridview实现复制粘贴
    VS.NET2010水晶报表安装部署[VS2010]
    C#中基础知识积累
  • 原文地址:https://www.cnblogs.com/xuqidong/p/12231766.html
Copyright © 2011-2022 走看看