我想在使用ListView
和pagination
时在模板中生成一系列页面,以动态生成用于分页的页面数:
https://getbootstrap.com/docs/4.0/components/pagination/
我的第一个尝试是为page_obj.paginator.num_pages
中的每个元素创建一个for循环,并得到错误int is not iterable
:
{% if is_paginated %}
<ul class="pagination">
{% for i in page_obj.paginator.num_pages %}
<li class="page-item">
<span class="page-link">
<a href="/catalogo?page={{i}}">
<span class="sr-only">(current)</span>
</span>
</li>
{% endfor %}
</ul>
{% endif }
然后,我发现没有,也不会有范围模板过滤器,因为此计算应在视图中完成,并将范围发送到模板,而不是在template
中生成。参见:
https://code.djangoproject.com/ticket/13088
那么我该如何访问
page_obj.paginator.num_pages
查看???
我的LisView:
class CatalogoListView(ListView):
model = UnitaryProduct
template_name = "shop/catalogo.html"
paginate_by = 10
def get_queryset(self):
filter_val = self.request.GET.get('filtro', 'todas')
order = self.request.GET.get('orderby', 'created')
if filter_val == "todas":
context = UnitaryProduct.objects.all().filter(available=True).order_by('-created')
return context
else:
context = UnitaryProduct.objects.filter(
subcategory2=filter_val,
).filter(available=True).order_by('-created')
return context
def get_context_data(self, **kwargs):
context = super(CatalogoListView, self).get_context_data(**kwargs)
context['filtro'] = self.request.GET.get('filtro', 'todas')
context['orderby'] = self.request.GET.get('orderby', 'created')
context['category'] = Category.objects.get(slug="catalogo")
return context
答案 0 :(得分:2)
num_pages
是一个整数,用于存储页面总数,因此不可迭代。
您要寻找的是page_range
,这是页码列表。
您可以从模板中对其进行迭代,只需替换
{% for i in page_obj.paginator.num_pages %}
使用
{% for i in page_obj.paginator.page_range %}