我正试图弄清楚如何在我的模板中使用django分页来显示类似“显示1-10的52”的内容。
我完成了分页本身,但没有想到这个要求 有什么想法吗?
答案 0 :(得分:43)
不知道为什么每个人都如此复杂化。正如the documentation所示,所有这些属性都已可用。
Paginator对象具有count
属性,该属性显示所有页面中的对象总数,Page
个对象具有start_index
和end_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
不是那么难,是吗?