【问题标题】:Django Paginator shows post titles Not Page numbers, why?Django Paginator 显示帖子标题而不是页码,为什么?
【发布时间】:2021-09-22 06:10:39
【问题描述】:

我正在尝试通过 ListView 使用 Django Paginator,但分页器显示的是帖子标题而不是页码: Page number replaced with post title

我该如何解决这个问题? 这是我的代码: 在views.py:

from django.shortcuts import render
from django.core.paginator import Paginator
from django.views.generic import ListView, DetailView
from .models import Post

# Create your views here.


# PostObject_list by using ListView
class PostList(ListView):
    model=Post
    paginate_by=20
    context_object_name='all_posts'
    ordering=['-created_at']


# allpost by using ListView
'''class AllPost(ListView):
    model=Post
    context_object_name='allpost'
    paginate_by=None
'''    

# Post_singl_object using DetailView
class PostDetail(DetailView):
    model=Post

在模板post_list.html

 </div>
            <nav aria-label="Page navigation example">
                <ul class="pagination d-flex justify-content-center mt-1">
                    {% if all_posts.has_previous  %}
                    <li class="page-item "><a class="page-link" href="?page={{ all_posts.previous_page_number }}">Previous</a></li>
                    {% endif %}

                    {% for page in all_posts %}
                        <li class="page-item ">
                        
                             <a class="page-link" href="?page={{ page }}"><span>{{page}}</span></a>
                        </li>
                    {% endfor %}
                 
                    {% if all_posts.has_next %}
                         <li class="page-item"><a class="page-link" href="?page={{all_posts.previous_page_number }}">Next</a></li>
                    {% endif %}
                </ul>
            </nav>
            </div>
            <!-- Pagination-->

谢谢!

【问题讨论】:

    标签: django django-templates django-pagination


    【解决方案1】:

    使用all_posts 将不起作用,因为这是对象列表,而不是页面对象。 all_posts 不会有 paginatorhas_previousprevious_page_number 等页面属性。

    在这种情况下,您需要使用page_obj,它在分页时由ListView 自动添加到模板上下文中。您可以使用page_obj.paginator.page_range从模板中获取页面范围:

    {% for page in page_obj.paginator.page_range %}
    <li class="page-item ">
       <a class="page-link" href="?page={{ page }}"><span>{{ page }}</span></a>
    </li>
    {% endfor %}
    

    由于同样的原因,PreviousNext 的实现也将无法工作。要解决这个问题,你还需要使用page_obj,所以总而言之:

    {% if page_obj.has_previous  %}
        <li class="page-item "><a class="page-link" href="?page={{ page_obj.previous_page_number }}">Previous</a></li>
    {% endif %}
    
    {% for page in page_obj.paginator.page_range %}
        <li class="page-item ">
           <a class="page-link" href="?page={{ page }}"><span>{{ page }}</span></a>
        </li>
    {% endfor %}
    
    {% if page_obj.has_next %}
         <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">Next</a></li>
    {% endif %}
    

    【讨论】:

    • 没关系,谢谢
    【解决方案2】:

    您应该访问paginator。在你的情况下,page_obj.paginator。尝试将您的模板更改为:

    {% for i in page_obj.paginator.page_range %}
    <li class="page-item ">
       <a class="page-link" href="?page={{ page }}"><span>{{page}}</span></a>
    </li>
    {% endfor %}
    

    【讨论】:

    猜你喜欢
    • 2014-04-21
    • 2020-12-13
    • 2017-11-24
    • 1970-01-01
    • 2018-10-12
    • 2020-08-16
    • 1970-01-01
    • 2022-09-21
    • 1970-01-01
    相关资源
    最近更新 更多