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
  • 相关阅读:
    纸壳CMS替换默认实现
    ASP.Net Core 2.2 InProcess托管的Bug:unable to open database file
    GitHub设置使用SSH Key,用TortoiseGit进行Clone仓库
    在Docker中运行纸壳CMS并配置使用MySql
    使用vs code开发纸壳CMS并启用Razor智能提示
    ASP .Net Core路由(Route)
    .Net Core在Middleware中解析RouteData
    纸壳CMS可视化建站系统搭建多语言网站
    Redis的初识
    C#/Java 动态生成电子发票
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/10550302.html
Copyright © 2011-2022 走看看