以前的分页是从网上搜索的一些代码,居然不知道Django有ObjectPaginator这么个东西。最近看看了Gae Cookbook上的几个关于django分页的处方,其实用ObjectPaginator做分页模板非常简单。

ObjectPaginator的构造函数需要提供query_set和num_per_page这两个参数,也就是你要使用的数据集和每页的文章数。还有一个orphas参数默认为0,用来避免出现最后一页文章过少的情况。

def __init__(self, query_set, num_per_page, orphans=0):
        self.query_set = query_set
        self.num_per_page = num_per_page
        self.orphans = orphans
        self._hits = self._pages = None

这里我只生成了一个文章分页的数量列表和前一页、下一页三个链接,然后用ObjectPaginator类的方法判断这些链接是否显示,也就是用get_page()方法来取得当前请求页面的文章,用has_next_page()方法判断是否存在下一页,用has_previous_page()方法判断是否存在前一页。

paginator = ObjectPaginator(all_posts,10)
	if page >= paginator.pages:
		page = paginator.pages - 1
	posts=paginator.get_page(page)
	pages=range(1,paginator.pages+1)	
	show_prev = paginator.has_previous_page(page)
	show_next = paginator.has_next_page(page)
	page=page+1

参考: