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

    一、后端代码示例

    这是自定义好的的分页器类,在写view代码的时候需要将其导入并实例化

      1 class Pagination(object):
      2 
      3     def __init__(self,current_page_num,all_count,request,per_page_num=2,pager_count=11):
      4         """
      5         封装分页相关数据
      6         :param current_page_num: 当前访问页的数字
      7         :param all_count:    分页数据中的数据总条数
      8         :param per_page_num: 每页显示的数据条数
      9         :param pager_count:  最多显示的页码个数
     10         """
     11         try:
     12             current_page_num = int(current_page_num)
     13         except Exception as e:
     14             current_page_num = 1
     15 
     16         if current_page_num <1:
     17             current_page_num = 1
     18 
     19         self.current_page_num = current_page_num
     20 
     21         self.all_count = all_count
     22         self.per_page_num = per_page_num
     23 
     24         # 实际总页码
     25         all_pager, tmp = divmod(all_count, per_page_num)
     26         if tmp:
     27             all_pager += 1
     28         self.all_pager = all_pager
     29 
     30 
     31         self.pager_count = pager_count
     32         self.pager_count_half = int((pager_count - 1) / 2)  # 5
     33 
     34 
     35         # 保存搜索条件
     36 
     37         import copy
     38         self.params=copy.deepcopy(request.GET) # {"a":"1","b":"2"}
     39 
     40     @property
     41     def start(self):
     42         return (self.current_page_num - 1) * self.per_page_num
     43 
     44     @property
     45     def end(self):
     46         return self.current_page_num * self.per_page_num
     47 
     48     def page_html(self):
     49         # 如果总页码 < 11个:
     50         if self.all_pager <= self.pager_count:
     51             pager_start = 1
     52             pager_end = self.all_pager + 1
     53         # 总页码  > 11
     54         else:
     55             # 当前页如果<=页面上最多显示11/2个页码
     56             if self.current_page_num <= self.pager_count_half:
     57                 pager_start = 1
     58                 pager_end = self.pager_count + 1
     59             # 当前页大于5
     60             else:
     61                 # 页码翻到最后
     62                 if (self.current_page_num + self.pager_count_half) > self.all_pager:
     63 
     64                     pager_start = self.all_pager - self.pager_count + 1
     65                     pager_end = self.all_pager + 1
     66 
     67                 else:
     68                     pager_start = self.current_page_num - self.pager_count_half
     69                     pager_end = self.current_page_num + self.pager_count_half + 1
     70 
     71         page_html_list = []
     72 
     73         first_page = '<li><a href="?page=%s">首页</a></li>' % (1,)
     74         page_html_list.append(first_page)
     75 
     76         if self.current_page_num <= 1:
     77             prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
     78         else:
     79             prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page_num - 1,)
     80 
     81         page_html_list.append(prev_page)
     82 
     83 
     84         #self.params=copy.deepcopy(request.GET) # {"a":"1","b":"2"}
     85 
     86         for i in range(pager_start, pager_end):
     87 
     88             self.params["page"]=i
     89 
     90             if i == self.current_page_num:
     91                 temp = '<li class="active"><a href="?%s">%s</a></li>' %(self.params.urlencode(),i)
     92             else:
     93                 temp = '<li><a href="?%s">%s</a></li>' % (self.params.urlencode(),i,)
     94             page_html_list.append(temp)
     95 
     96 
     97 
     98         if self.current_page_num >= self.all_pager:
     99             next_page = '<li class="disabled"><a href="#">下一页</a></li>'
    100         else:
    101             next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page_num + 1,)
    102         page_html_list.append(next_page)
    103         last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
    104         page_html_list.append(last_page)
    105 
    106         return ''.join(page_html_list)
    View Code

    在指定的位置导入分页器类,如:

     1 from Pagedemo.page import Pagination
     2     current_page_num = request.GET.get("page",1)   #获取前端的页码,默认为1
     3     book_list = Book.objects.all()   # 查询后端要分页显示的数据
     4     
     5     #实例化一个pagination对象
     6     pagination=Pagination(current_page_num,book_list.count(),request)
     7 
     8 
     9 
    10     book_list=book_list[pagination.start:pagination.end]
    11 
    12     return render(request,"index.html",locals())
    View Code

    二、前端代码示例

    布局样式参照bootstrap

     1 <!DOCTYPE html>
     2 <html lang="zh-CN">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <meta name="viewport" content="width=device-width, initial-scale=1">
     7     <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
     8 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
     9 </head>
    10 <body>
    11 
    12 <ul>
    13     {% for book in book_list %}
    14     <li>{{ book.title }} ---- {{ book.price }}</li>
    15     {% endfor %}
    16 </ul>
    17 
    18 <nav aria-label="Page navigation">
    19   <ul class="pagination">
    20    {{ pagination.page_html|safe }}......
    21   </ul>
    22 </nav>
    23 
    24 
    25 </body>
    26 </html>
    View Code
  • 相关阅读:
    mysq 日期相减
    说说时间观与时间管理——北漂18年(71)
    ionic之切换开关
    ionic之单选框
    SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
    14.5.2.2 autocommit, Commit, and Rollback
    14.5.2 事务隔离级别
    对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
    mysql explain 解释
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/10550302.html
Copyright © 2011-2022 走看看