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})
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>
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})
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>
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