在Django中使用分页器更改每页项目数量或查看所有项目
我正在使用django 1.3,并且有一个视图可以处理分页的数据查询(每页显示50个对象)。下面是这个视图中get_context_data()方法的相关部分:
#build paginator for querysets
paginated_scanned_assets = Paginator(scanned_assets_qs, 50)
#get the specified page
try:
page_num = int(self.request.GET.get('page', '1'))
except ValueError:
page_num = 1
#get a paginated list of object
try:
scanned_assets = paginated_scanned_assets.page(page_num)
except (EmptyPage, InvalidPage):
scanned_assets = paginated_scanned_assets.page(paginated_scanned_assets.num_pages)
这个视图渲染的模板只是从查询集中构建一个表格,并且有链接可以跳转到下一页和上一页。
我想做的是要么添加一个链接来查看所有内容,这样就可以不分页地显示查询结果,要么提供一个选项来修改每页显示的对象数量(这样就可以重新创建分页功能)。不过我对视图和设计方面的知识不多,所以不太确定该怎么做。这个可以用js实现吗?如果可以的话,怎么做?或者我能否仅仅通过django和html来实现?这可能很简单,但我经验不多,找不到相关的答案或例子。
谢谢!
1 个回答
3
你想要做的是给视图添加一个可选的参数,叫做'page_size',然后可以这样做:
def your_view(request, ..., page_size=50):
scanned_assets_qs = # get your scanned_assets QuerySet
if page_size == -1:
page_size = scanned_assets_qs.count()
paginator = Paginator(scanned_assets_qs, page_size)
这样你就可以传入一个任意的页面大小,如果想要查看所有内容,可以传入-1(我会用合适的网址来实现这一点,另外还会有一个/viewall/的网址,无论如何都会传入-1)