Django:访问num_pages以生成分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django:访问num_pages以生成分页相关的知识,希望对你有一定的参考价值。

[我想在使用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
答案

num_pages是存储页面总数的整数,因此不可迭代。

以上是关于Django:访问num_pages以生成分页的主要内容,如果未能解决你的问题,请参考以下文章

Django分页解析

django基础- 分页组件

Django分页

django实现模板分页知识点总结

Django分页器

Django-前端分页效果