2009-11-06 115 views
9

大家好!以django分页显示页面计数

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

我完成了分页本身,但没有想到这个要求。 任何想法?

回答

37

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

分页程序对象具有属性count示出对象的所有页的总数,和Page对象具有start_indexend_index性质。

因此,假设您通过page到模板的上下文:

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

哇!这是我正在寻找的灵魂。谢谢! – webgonewild 2009-11-09 14:12:17

+1

这非常有帮助 - 谢谢。唯一需要注意的是,默认情况下,在ListView中,该对象称为“page_obj”而不是“page”。 – BigglesZX 2016-05-02 07:41:27

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

paginatorInstance.num_pages # this is there by default 

并不难,是吗?

1

该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}} 

(我写了这个代码,而编译器的好处,因此测试它)

+0

只是发送到分页程序模板,然后访问诸如pagintator属性:{{} offers.previous_page_number},{{offers.next_page_number}}, {{offers.paginator.count}} – gerpaick 2017-11-11 13:41:42

3

你需要在幕后做些适度更复杂的事情。请注意,虽然我是一个python开发者,但我现在已经使用werkzeug和jinja2很久了,所以我的django语法有点生疏。此外,这是干式编码的(正如我刚才在浏览器中输入的那样),应该进行测试以确保它按预期工作。

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

所以隐约类似于:

Paginator(query, objects_per_page, current_page_number) 

再经过所产生的分页程序对象到模板中。

里面的分页程序的初始化会希望做类似的东西:

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的对象。

我希望能给你一个关于如何干净地做到这一点的一般想法。

+0

Peharps更好地继承内置的django.core.paginator.Paginator类来添加lower_limit和upper_limit属性。 – webgonewild 2009-11-06 18:38:53

+0

很有可能,我在安静的时候没有用过django。此外,从我坐的位置来看,num_pages似乎是无效的统计数据。 你似乎想要的对象的总数,而不是总页数,但可能有另一个解决方案,但在Django的分页。 – 2009-11-06 18:43:46