Django中实现分页
来源:互联网 发布:哈尔滨金蝶软件 编辑:程序博客网 时间:2024/06/05 10:41
1、view重写Paginator类
from django.core.paginator import Paginatorclass JuncheePaginator(Paginator): def __init__(self, object_list, per_page, range_num=5, orphans=0, allow_empty_first_page=True): Paginator.__init__(self, object_list, per_page, orphans, allow_empty_first_page) self.range_num = range_num def page(self, number): self.page_num = number return super(JuncheePaginator, self).page(number) def _page_range_ext(self): #print type(self.page_num) #!!!坑 #type(self.page_num)==unicode导致self.page_num - i没有结果,循环直接结束 self.page_num= int(self.page_num) num_count = 2 * self.range_num + 1 if self.num_pages <= num_count: return range(1, self.num_pages + 1) num_list = [] num_list.append(self.page_num) for i in range(1, self.range_num + 1): if self.page_num - i <= 0: num_list.append(num_count + self.page_num - i) else: num_list.append(self.page_num - i) if self.page_num + i <= self.num_pages: num_list.append(self.page_num + i) else: num_list.append(self.page_num + i - num_count) num_list.sort() return num_list page_range_ext = property(_page_range_ext)
2、view分页方法
def paging(request): article = Article.objects.all().order_by('-created_time') paginator = JuncheePaginator(article,1) # Show 25 contacts per page page = request.GET.get('page') try: article = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. article = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. article = paginator.page(paginator.num_pages) return render(request, 'blog/paging.html', {'contacts': article})
3、分页模板
{% for contact in contacts %} {# Each "contact" is a Contact model object. #} {{ contact.full_name|upper }}<br /> ... {{ contact.title}}{% endfor %}<div> {% if contacts.has_previous %} <a href='?page={{ contacts.previous_page_number }}'><<</a> {% endif %} {% for page in contacts.paginator.page_range_ext %} {% ifequal page contacts.number %} <a>{{ page }}</a> {% else %} <a href='?page={{ page }}'>{{ page }}</a> {% endifequal %} {% endfor %} {% if contacts.has_next %} <a href='?page={{ contacts.next_page_number }}'>>></a> {% endif %}</div>
4、url设置
urlpatterns = [ url(r'^pag$', views.paging, name='page_list') ]
init()函数不用说了吧,就是重载了一下,添加了一个range_num参数,代表在可能的情况下,当前页左右各显示多少个页标签,默认值为5。
page()函数是对父类Paginator的page()函数的重写,主要是为了记录当前页。
核心是_page_range_ext()函数,它实现了我们根据page_num的情况来返回恰当的页面列表,page_num取默认值的情况下,如果当前页是8,则我们返回的页数列表就应该是[3,4,5,6,7,8,9,10,11,12,13],但如果说是当前页是2,则会返回[1,2,3,4,5,6,7,8,9,10,11],其余的以此类推。具体算法我就不仔细分析了,大家可以参看源代码,个人感觉还可以优化,但我现在也就能用就行。
参考:http://www.cnblogs.com/skying555/p/5943232.html
0 0
- Django中实现分页
- Django中扩展Paginator实现分页
- django viewList 中实现分页功能
- django分页实现
- django实现分页
- Django 实现分页显示
- 在Django 1.5 中 Django Step by Step (九)教程分页实现方法的修正
- Django 分页的简单实现
- Django实现select分页跳转
- django 分页功能的实现
- 使用Django实现分页功能
- django实现分页(pure-pagination)
- 用Django分页器实现分页跳转
- Django中ListView分页技术
- Django分页的基本实现办法
- django使用 Paginator 实现分页功能
- 实现Django网站列表自动分页
- Django分页的基本实现办法
- SSL2081 书本整理(dp)
- 解决ubuntu14.04 samba服务出错
- 另一种思路比较2个日期是否相等的方式
- ubuntu 安装samba
- EditText焦点的转换
- Django中实现分页
- 第八周:[Leetcode]300. Longest Increasing Subsequence
- 在winform中使用三层架构学习总结
- Android系统移植与调试之------->build.prop文件详细赏析
- android学习(十九) 使用无线连接设备(三) 通过P2P搜索网络服务
- 2017.4.15考试
- poj 2481 Cows
- [C++] 代码C风格缩进
- NYOJ--488--dfs--素数环