• Django分页


    分页

     1 from django.shortcuts import render
     2 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
     3 
     4 L = []
     5 for i in range(999):
     6     L.append(i)
     7 
     8 def index(request):
     9     current_page = request.GET.get('p')
    10 
    11     paginator = Paginator(L, 10)
    12     # per_page: 每页显示条目数量
    13     # count:    数据总个数
    14     # num_pages:总页数
    15     # page_range:总页数的索引范围,如: (1,10),(1,200)
    16     # page:     page对象
    17     try:
    18         posts = paginator.page(current_page)
    19         # has_next              是否有下一页
    20         # next_page_number      下一页页码
    21         # has_previous          是否有上一页
    22         # previous_page_number  上一页页码
    23         # object_list           分页之后的数据列表
    24         # number                当前页
    25         # paginator             paginator对象
    26     except PageNotAnInteger:
    27         posts = paginator.page(1)
    28     except EmptyPage:
    29         posts = paginator.page(paginator.num_pages)
    30     return render(request, 'index.html', {'posts': posts})
    Django内置分页view函数
     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8 <ul>
     9     {% for item in posts %}
    10         <li>{{ item }}</li>
    11     {% endfor %}
    12 </ul>
    13 
    14 <div class="pagination">
    15       <span class="step-links">
    16         {% if posts.has_previous %}
    17             <a href="?p={{ posts.previous_page_number }}">Previous</a>
    18         {% endif %}
    19           <span class="current">
    20             Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
    21           </span>
    22           {% if posts.has_next %}
    23               <a href="?p={{ posts.next_page_number }}">Next</a>
    24           {% endif %}
    25       </span>
    26 
    27 </div>
    28 </body>
    29 </html>
    Django内置分页HTML页面
     1 from django.shortcuts import render
     2 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
     3 
     4 
     5 class CustomPaginator(Paginator):
     6     def __init__(self, current_page, max_pager_num, *args, **kwargs):
     7         """
     8         :param current_page: 当前页
     9         :param max_pager_num:最多显示的页码个数
    10         :param args:
    11         :param kwargs:
    12         :return:
    13         """
    14         self.current_page = int(current_page)
    15         self.max_pager_num = max_pager_num
    16         super(CustomPaginator, self).__init__(*args, **kwargs)
    17 
    18     def page_num_range(self):
    19         # 当前页面
    20         # self.current_page
    21         # 总页数
    22         # self.num_pages
    23         # 最多显示的页码个数
    24         # self.max_pager_num
    25         print(1)
    26         if self.num_pages < self.max_pager_num:
    27             return range(1, self.num_pages + 1)
    28         print(2)
    29         part = int(self.max_pager_num / 2)
    30         if self.current_page - part < 1:
    31             return range(1, self.max_pager_num + 1)
    32         print(3)
    33         if self.current_page + part > self.num_pages:
    34             return range(self.num_pages + 1 - self.max_pager_num, self.num_pages + 1)
    35         print(4)
    36         return range(self.current_page - part, self.current_page + part + 1)
    37 
    38 
    39 L = []
    40 for i in range(999):
    41     L.append(i)
    42 
    43 def index(request):
    44     current_page = request.GET.get('p')
    45     paginator = CustomPaginator(current_page, 11, L, 10)
    46     # per_page: 每页显示条目数量
    47     # count:    数据总个数
    48     # num_pages:总页数
    49     # page_range:总页数的索引范围,如: (1,10),(1,200)
    50     # page:     page对象
    51     try:
    52         posts = paginator.page(current_page)
    53         # has_next              是否有下一页
    54         # next_page_number      下一页页码
    55         # has_previous          是否有上一页
    56         # previous_page_number  上一页页码
    57         # object_list           分页之后的数据列表
    58         # number                当前页
    59         # paginator             paginator对象
    60     except PageNotAnInteger:
    61         posts = paginator.page(1)
    62     except EmptyPage:
    63         posts = paginator.page(paginator.num_pages)
    64 
    65     return render(request, 'index.html', {'posts': posts})
    扩展内置分页view函数
     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8 
     9 <ul>
    10     {% for item in posts %}
    11         <li>{{ item }}</li>
    12     {% endfor %}
    13 </ul>
    14 
    15 <div class="pagination">
    16 <span class="step-links">
    17 {% if posts.has_previous %}
    18     <a href="?p={{ posts.previous_page_number }}">Previous</a>
    19 {% endif %}
    20 
    21     {% for i in posts.paginator.page_num_range %}
    22         <a href="?p={{ i }}">{{ i }}</a>
    23     {% endfor %}
    24 
    25     {% if posts.has_next %}
    26         <a href="?p={{ posts.next_page_number }}">Next</a>
    27     {% endif %}
    28 </span>
    29 
    30 <span class="current">
    31 Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
    32 </span>
    33 
    34 </div>
    35 </body>
    36 </html>
    扩展内置分页html页面
     1 __author__ = 'Administrator'
     2 from django.utils.safestring import mark_safe
     3 
     4 
     5 class Pagination(object):
     6     def __init__(self, current_page, data_count, per_page_count=7, pager_num=7):
     7         try:
     8             self.current_page = int(current_page)
     9         except Exception as e:
    10             self.current_page = 1
    11         self.data_count = data_count
    12         self.per_page_count = per_page_count
    13         self.pager_num = pager_num
    14 
    15     @property
    16     def start(self):
    17         return (self.current_page - 1) * self.per_page_count
    18 
    19     @property
    20     def end(self):
    21         return self.current_page * self.per_page_count
    22 
    23     @property
    24     def total_count(self):
    25         v, y = divmod(self.data_count, self.per_page_count)
    26         if y:
    27             v += 1
    28         return v
    29 
    30     def page_str(self, base_url):
    31         page_list = []
    32 
    33         if self.total_count < self.pager_num:
    34             start_index = 1
    35             end_index = self.total_count + 1
    36         else:
    37             if self.current_page <= (self.pager_num + 1) / 2:
    38                 start_index = 1
    39                 end_index = self.pager_num + 1
    40             else:
    41                 start_index = self.current_page - (self.pager_num - 1) / 2
    42                 end_index = self.current_page + (self.pager_num + 1) / 2
    43                 if (self.current_page + (self.pager_num - 1) / 2) > self.total_count:
    44                     end_index = self.total_count + 1
    45                     start_index = self.total_count - self.pager_num + 1
    46 
    47         if self.current_page == 1:
    48             prev = '<li><a class="page" href="javascript:void(0);">上一页</a></li>'
    49         else:
    50             prev = '<li><a class="page" href="%s?p=%s">上一页</a></li>' % (base_url, self.current_page - 1,)
    51         page_list.append(prev)
    52 
    53         for i in range(int(start_index), int(end_index)):
    54             if i == self.current_page:
    55                 temp = '<li class="active"><a class="page active" href="%s?p=%s">%s</a></li>' % (base_url, i, i)
    56             else:
    57                 temp = '<li><a class="page" href="%s?p=%s">%s</a></li>' % (base_url, i, i)
    58             page_list.append(temp)
    59 
    60         if self.current_page == self.total_count:
    61             nex = '<li><a class="page" href="javascript:void(0);">下一页</a></li>'
    62         else:
    63             nex = '<li><a class="page" href="%s?p=%s">下一页</a></li>' % (base_url, self.current_page + 1,)
    64         page_list.append(nex)
    65 
    66         # jump = """
    67         # <input type='text'  /><a onclick='jumpTo(this, "%s?p=");'>GO</a>
    68         # <script>
    69         #     function jumpTo(ths,base){
    70         #         var val = ths.previousSibling.value;
    71         #         location.href = base + val;
    72         #     }
    73         # </script>
    74         # """ % (base_url,)
    75         #
    76         # page_list.append(jump)
    77 
    78         page_str = mark_safe("".join(page_list))
    79 
    80         return page_str
    自定义分页组件
  • 相关阅读:
    微服务-Nacos
    微服务RPC框架-Feign
    读书笔记之《大型分布式网站架构设计与实践》
    读书笔记之《Java并发编程的艺术》—— 四
    读书笔记之《Java并发编程的艺术》—— 三
    读书笔记之《Java并发编程的艺术》—— 二
    读书笔记之《Java并发编程的艺术》—— 一
    noip2021 训练4 做题记录
    noip 训练 (线段树专项)
    UVA11671 矩阵中的符号 Sign of Matrix 题解
  • 原文地址:https://www.cnblogs.com/sun-10387834/p/12470669.html
Copyright © 2020-2023  润新知