【问题标题】:Django function based view pagination not working????基于 Django 函数的视图分页不起作用???
【发布时间】:2020-06-13 05:21:21
【问题描述】:

我的分页有问题,我放置的页数 (5) 不起作用。 UnorderedObjectListWarning:分页可能会产生与无序 object_list:QuerySet 不一致的结果。

如何将其更改为基于类的视图。

def post(request, category_slug):
        categories = Category.objects.all()
        post  = Post.objects.all()

        if category_slug:
            category = get_object_or_404(Category, slug=category_slug)
            posts = post.filter(category=category).order_by('-id')

            page = request.GET.get('page', 1)

            paginator = Paginator(posts, 6)
            try:
                users = paginator.page(page)
            except PageNotAnInteger:
                users = paginator.page(1)
            except EmptyPage:
                users = paginator.page(paginator.num_pages)
                print(users)

        context = {

            'page_obj': users,
        }




                <nav aria-label="Page navigation example">
                    <ul class="pagination pagination-template d-flex justify-content-center">
                      {% if page_obj.has_previous %}
                      <li class="page-item"><a href="?page=1" class="page-link"> <i class="fa fa-angle-left" aria-hidden="true"></i><i class="fa fa-angle-left" aria-hidden="true"></i></a></li>
                      <li class="page-item"><a href="?page={{ page_obj.previous_page_number }}" class="page-link"> <i class="fa fa-angle-left" aria-hidden="true"></i></a></li>
                      {% endif %}

                      {% for num in page_obj.paginator.page_range %}
                      {% if page_obj.number == num %}
                      <li class="page-item"><a href="?page={{ num }}" class="page-link active">{{ num }}</a></li>
                      {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
                      <li class="page-item"><a href="?page={{ num }}" class="page-link">{{ num }}</a></li>
                      {% endif %}
                     {% endfor %}

                     {% if page_obj.has_next %}
                      <li class="page-item"><a href="?page={{ page_obj.next_page_number }}" class="page-link"> <i class="fa fa-angle-right" aria-hidden="true"></i></a></li>
                      <li class="page-item"><a href="?page={{ page_obj.paginator.num_pages }}" class="page-link"><i class="fa fa-angle-right" aria-hidden="true"></i><i class="fa fa-angle-right" aria-hidden="true"></i></a></li>
                      {% endif %}
                    </ul>
                  </nav>

【问题讨论】:

    标签: python django


    【解决方案1】:

    filter 的返回类型是 QuerySet (https://docs.djangoproject.com/en/3.0/ref/models/querysets/)

    Paginator 文档 (https://docs.djangoproject.com/en/3.0/ref/paginator/#django.core.paginator.Paginator) 说它的第一个参数需要一个列表。

    QuerySet 文档说,为了强制评估为列表,您可以调用list()

    前:

    Paginator(post.list(), 6)

    【讨论】:

    • 添加 .list() 到 post 给了我一个异常错误。异常值:'QuerySet' 对象没有属性'list'
    • 我也尝试将查询集添加到 list() 中。像这样:posts = list(post.filter(category=category).order_by('-id'))
    • 对不起,你完全正确@KaluPatrick;应该是list(post);我误读了文档。你说你试过了;它给你一个错误吗?
    猜你喜欢
    • 2019-09-24
    • 2020-12-25
    • 2013-04-06
    • 2020-02-28
    • 2017-05-08
    • 2023-03-14
    • 2012-10-23
    • 2014-10-12
    • 2014-02-16
    相关资源
    最近更新 更多