Django:访问num_pages以生成分页

时间:2019-12-04 15:49:03

标签: django

我想在使用ListViewpagination时在模板中生成一系列页面,以动态生成用于分页的页面数:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

num_pages是一个整数,用于存储页面总数,因此不可迭代。

您要寻找的是page_range,这是页码列表。 您可以从模板中对其进行迭代,只需替换

{% for i in page_obj.paginator.num_pages %}

使用

{% for i in page_obj.paginator.page_range %}