使用django中的分页器更改每页的项目数或查看视图中的所有项目

时间:2011-07-20 23:36:33

标签: python django pagination django-views

我使用的是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 个答案:

答案 0 :(得分: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)

然后你可以传入一个任意的page_size,一个-1用于查看所有页面(我会用适当的url做这个,加上/ viewall /的url,无论怎样传入-1)