分页在网页上不生效

Pagination not taking effect on webpage

我正在 sports.html 页面上应用分页。在 views.py 中,我使用 ListView 并使用 paginate_by = 2,但问题是分页未在网页上生效。 页码在页面上可见,当点击这些页码时它没有显示任何错误,但所有帖子在所有页面上都可见,帖子不会除以 paginate_by 值。 谁能指出我在这里做错了什么?

views.py

class SportsList(ListView):
    model = Sports
    template_name = 'frontend/sports.html'
    paginate_by = 2

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['main'] = Main.objects.all()
        context['sports'] = Sports.objects.all()
        return context
 

sports.html

<section class="blog_area">
        <div class="container">
            <div class="row">
                <div class="col-lg-8">
                    <div class="blog_left_sidebar">
                        {% for sport in sports %}
                        <article class="row blog_item">
                            <div class="col-md-3">
                                <div class="blog_info text-right">
                                    <ul class="blog_meta list">
                                        <li><a href="#">XAR<i class="lnr lnr-user"></i></a></li>
                                        <li><a href="#">From: {{ sport.from_date }}<i class="lnr lnr-calendar-full"></i></a></li>
                                        <li><a href="#">To: {{ sport.to_date }}<i class="lnr lnr-calendar-full"></i></a></li>
                                        <li><a href="#">{{ sport.category }}<i class="lnr lnr-layers"></i></a></li>
                                    </ul>
                                </div>
                            </div>
                            <div class="col-md-9">
                                <div class="blog_post">
                                    <img src="{{ sport.featured_image.url }}" alt="">
                                    <div class="blog_details">
                                        <a href="{% url 'sports_details' sport.slug %}">
                                            <h2>{{ sport.title }}</h2>
                                        </a>
                                        <p>{{ sport.content|truncatewords:30|safe }}</p>
                                        <a href="{% url 'sports_details' sport.slug %}" class="blog_btn">View More</a>
                                    </div>
                                </div>
                            </div>
                        </article>
                        {% endfor %}
                        {% if is_paginated %}
                        <nav class="blog-pagination justify-content-center d-flex">
                            <ul class="pagination">
                            {% if page_obj.has_previous %}
                                <li class="page-item">
                                    <a href="?page={{ page_obj.previous_page_number }}" class="page-link">
                                        <span aria-hidden="true">
                                            <span class="lnr lnr-chevron-left"></span>
                                        </span>
                                    </a>
                                </li>
                            {% endif %}
                            {% for num in page_obj.paginator.page_range %}
                                {% if page_obj.number == num %}
                                    <li class="page-item active"><a href="#" class="page-link">{{ 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" aria-label="Next">
                                        <span aria-hidden="true">
                                            <span class="lnr lnr-chevron-right"></span>
                                        </span>
                                    </a>
 
                                </li>
                            {% endif %}
                            </ul>
                            {% endif %}
                        </nav>
                    </div>
                </div>
           </div>
              </div>
  </section>

这是因为您正在 get_context_data 上创建查询集。您不尊重列表视图结构。在您的视图中尝试这样的操作:

class SportsList(ListView):
    queryset = Sport.objects.all()
    context_object_name = “sports”
    template_name = 'frontend/sports.html'
    paginate_by = 2
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['main'] = Main.objects.all()
        return context

您需要在 views.py.

中使用以下内容
 context_object_name = 'sports'

默认情况下,当 Django 视图正在执行时,self.object_list 将包含视图正在操作的对象列表(通常,但不一定是查询集)。您可以在此处查看 Django 文档中的参考资料。 generic list view

当然,您要在 def get_context_data 的上下文中添加 'sports',但是 Django 通用列表视图需要根据 context_object_name 或 [=15] 中提到的值进行操作=].

因此在您的 views.py 中使用:

class SportsList(ListView):
    model = Sports
    template_name = 'frontend/sports.html'
    paginate_by = 2
    context_object_name = 'sports'
    ordering = ["id"]