在django分页中显示页面项目计数

时间:2009-11-06 18:16:54

标签: django django-templates pagination

我正试图弄清楚如何在我的模板中使用django分页来显示类似“显示1-10的52”的内容。

我完成了分页本身,但没有想到这个要求 有什么想法吗?

5 个答案:

答案 0 :(得分:43)

不知道为什么每个人都如此复杂化。正如the documentation所示,所有这些属性都已可用。

Paginator对象具有count属性,该属性显示所有页面中的对象总数,Page个对象具有start_indexend_index属性。

因此,假设您将page传递给模板上下文:

{{ page.start_index }} to {{ page.end_index }} of {{ page.paginator.count }}.

答案 1 :(得分:3)

你需要在幕后做一些比较复杂的事情。请注意,虽然我是一个python开发人员,但我已经使用了werkzeug和jinja2很长一段时间,所以我的django语法有点生疏。这也是干编码的(就像我在浏览器中输入的那样),应该进行测试以确保它按预期工作。

通常我会创建一个分页对象,并将其传递给未经页面过滤的查询对象,您也可以告诉它每页有多少以及您所在的页面。

有点类似于:

Paginator(query, objects_per_page, current_page_number)

然后将生成的paginator对象传递给模板。

在paginator的 init 中,你想要做类似的事情:

def __init__(self, query, objects_per_page, current_page_number):
    self.total = query.count()

    self.per_page = objects_per_page
    self.current_page_number = current_page_number
    self.lower_limit = objects_per_page * current_page_number
    self.upper_limit = objects_per_page * (current_page_number + 1)

    if self.upper_limit > self.total:
        self.upper_limit = self.total

    self.objects = query[self.lower_limit - 1:self.upper_limit - 1]

然后在模板中你会做类似

的事情
Showing {{paginator.lower_limit}}-{{paginator.upper_limit}} of {{paginator.total}}

稍后当你准备迭代对象时,你可以迭代paginator.objects。

我希望能让您大致了解如何干净利落地完成这项任务。

答案 2 :(得分:2)

django Paginator对象具有num_pages属性。在您的视图中,您只需将正确的数据传递到模板并在那里显示即可。

所以作为(粗略)的例子:

查看

 current_page = ## input param 
 items_per_page = 10  
 paginator = Paginator(result, items_per_page)    

 ...
 return render_to_response('template.html', 
   {
     'num_pages': paginator.num_pages,
     'start_count': items_per_page * current_page + 1,
     'end_count': (items_per_page * current_page + 1) + len(paginator(current_page).object_list)
     'items_per_page':  items_per_page
   }

<强>模板

showing {{start_count} - {{end_count}} of {{num_pages}}

(我在没有编译器的情况下编写了这段代码,因此请测试它)

答案 3 :(得分:0)

paginator = Paginator(query, settings.SEARCH_DATA_PER_PAGE)

对于页数:

num_of_pages = paginator.num_pages

有关所有页面上的项目总数:

num_of_objects = paginator.count

您可以根据此数据计算每页的项目数。

答案 4 :(得分:-1)

totalPages = math.ceil(float(totalRecords)/recordsPerPage)

paginatorInstance.num_pages # this is there by default

不是那么难,是吗?