修改Django分页类,自定义实现分页功能
2017-11-08 20:43
671 查看
虽然Django自带的有分页类Paginator,但是不能自定义的显示诸如123 4 567这样的分页方式,因此自定义自己的Paginator类来实现分页功能。
第一种是当你要显示的最大页数,大于你实际拥有的页数的时候
第二种是当前页数小于一共要显示多少页的一半的时候
第三种是当前页加共显示多少页的一半,大于实际的总页数的时候
第四种是当前页大于共显示多少页的一半的时候
说明:
在
在view.py里,代码如下:
在页面当中,可以这样使用:
分页分析:
分页情况,包含了以下4种情况。第一种是当你要显示的最大页数,大于你实际拥有的页数的时候
第二种是当前页数小于一共要显示多少页的一半的时候
第三种是当前页加共显示多少页的一半,大于实际的总页数的时候
第四种是当前页大于共显示多少页的一半的时候
代码实现:
新建一个名为mypaginator.py的文件,代码为如下部分:
# -*- coding: utf-8 -*- from django.core.paginator import Paginator class MyPaginator(Paginator): def __init__(self, current_page, max_pager_num, *args, **kwargs): self.current_page = int(current_page) self.max_pager_num = int(max_pager_num) super(MyPaginator, self).__init__(*args, **kwargs) def get_start_end(self): return self.show_page_num() def show_page_num(self): # 对应第一种情况 if self.max_pager_num > self.num_pages: start = 1 end = self.num_pages return start, end # 对应第二种情况 part = self.max_pager_num // 2 if self.current_page < part + 1: start = 1 end = self.max_pager_num return start, end # 对应第三种情况 if self.current_page + part > self.num_pages: start = self.num_pages - self.max_pager_num + 1 end = self.num_pages return start, end # 对于第四种情况 if self.current_page > part + 1: start = self.current_page - part end = self.current_page + (part - 1) return start, end
说明:
在
__init__中多定义了两个参数。
current_page是当前页数,可以用来进行页码的跳转以及点击其他页数。
max_pager_num-1是一共要显示多少页。start,end是页面要显示的起始页,和最终页。
在view.py里,代码如下:
def index(request): posts = Post.objects.all().order_by('created_date') current_page = request.GET.get('page', 1) paginator = MyPaginator(current_page, 11, posts, 1) start, end = paginator.get_start_end() page_range = range(start, end + 1) try: post_list = paginator.page(current_page) except PageNotAnInteger: post_list = paginator.page(1) except EmptyPage: post_list = paginator.page(paginator.num_pages) return render(request, 'index.html', {"post_list": post_list,"page_range": page_range})
在页面当中,可以这样使用:
{% if post_list.has_previous %} <a href="?page={{ post_list.previous_page_number }}">上一页</a> {% endif %} {% for i in page_range %} {% if post_list.paginator.current_page == i %} <a style="color: red" href="?page={{ i }}">{{ i }}</a> {% else %} <a href="?page={{ i }}">{{ i }}</a> {% endif %} {% endfor %} {% if post_list.has_next %} <a href="?page={{ post_list.next_page_number }}">下一页</a> {% endif %}
相关文章推荐
- django-pure-pagination分页功能的实现
- ListView分页功能(2) 自定义View实现分页功能
- django 实现分页功能
- 使用Django实现分页功能
- 在django中使用自定义标签实现分页功能
- django-pure-pagination分页功能的实现
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- django-pure-pagination分页功能的实现
- JS自定义功能函数实现动态添加网址参数修改网址参数值
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- Django开发个人博客网站——10、分页功能的实现
- GridView分页的实现以及自定义分页样式功能实例
- django-pure-pagination分页功能的实现
- JS自定义功能函数实现动态添加网址参数修改网址参数值
- 用smarty模板做数据实现修改、分页等功能
- WPF DataGrid分页功能实现代码 修改原作者不能实现的部分
- Django实现简单分页功能的方法详解
- PHPCMS V9 自定义列表分页功能实现方法
- django-pure-pagination分页功能的实现
- django-pure-pagination分页功能的实现