Django分页不起作用,对象列表正在呈现项目,但未划分为页面

ztmd8pv5  于 2022-12-14  发布在  Go
关注(0)|答案(2)|浏览(121)

我目前在一个电子商务网站上工作,我试图创建一个产品列表页面,该页面在显示4个项目后会跨到另一个页面。呈现该页面不会产生任何错误,但数据库中的所有项目都显示在同一个页面上,即使切换到另一个页面后也保持不变。
这是我的views.py:

from django.shortcuts import render, get_object_or_404
from .models import Category, Item
from django.core.paginator import Paginator   

def item_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    items = Item.objects.filter(available=True)

    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        items = items.filter(category=category)

    paginator = Paginator(items, 4)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)

    return render(request,
                  'item/list.html',
                  {'category': category,
                   'categories': categories,
                   'page_obj': page_obj,
                   'items': items})

我的urls.py文件:

from django.urls import path
from . import views

app_name = 'shop'

urlpatterns = [
    path('', views.item_list, name='item_list'),
    path('<slug:category_slug>/', views.item_list, name='item_list'),
    path('<int:id>/<slug:slug>/', views.item_detail, name='item_detail'),
]

模板中的分页代码段

<nav class="d-flex justify-content-center wow fadeIn">
        <ul class="pagination pg-blue">

          <!--Arrow left-->
          {% if page_obj.has_previous %}
            <a href="?page={{ page_obj.previous_page_number }}">Previous</a>
          {% endif %}
            <span class="current">
            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
            </span>
          {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}">Next</a>
          {% endif %}
        </ul>
 </nav>

以及显示产品的逻辑

<div class="row wow fadeIn">

          <!--Grid column-->
          {% for item in items %}
          <div class="col-lg-3 col-md-6 mb-4">

            <!--Card-->
            <div class="card" style="width: 16rem; height: 25rem">

              <!--Card image-->
              <div class="view overlay">
                <a href="{{ item.get_absolute_url }}">
                  {% if item.tags and item.label %}
                  <div class="imgHolder">
                    <img src="{{ item.image.url }}" class="img-fluid">
                    <span class="badge badge-pill {{ item.get_label_display }}-color">{{ item.tags }}</span>
                  </div>
                  {% else %}
                  <img src="{{ item.image.url }}" class="img-fluid">
                  {% endif %}
                </a>
                <a href="{{ item.get_absolute_url }}">
                  <div class="mask rgba-white-slight"></div>
                </a>
              </div>
              <!--Card image-->

              <!--Card content-->
              <div class="card-body text-center" style="height: 9rem;">
                <!--Category & Title-->
                <a href="{{ item.category.get_absolute_url }}" class="grey-text">
                  <h5>{{ item.category.name|truncatechars:20 }}</h5>
                </a>
                <h5>
                  <strong style="color:red">
                    <a href="{{ item.get_absolute_url }}">{{ item.name }}</a>
                  </strong>
                </h5>

                <h6 class="font-weight-bold">
                  {% if item.discount_price %}
                  <strong><del>${{ item.price}}</del></strong>
                  <strong>${{ item.discount_price }}</strong>
                  {% else %}
                  <strong>${{ item.price }}</strong>
                  {% endif %}
                </h6>

              </div>
              <!--Card content-->

            </div>
            <!--Card-->
          </div>
          {% endfor %}
        </div>

我真的很想知道我做错了什么,我也愿意用其他方法来解决同样的问题。谢谢

zujrkrfu

zujrkrfu1#

您正在使用传递给分页器的所有查询集。您必须迭代page_obj.object_list。

page_obj = paginator.get_page(page_number)
page_obj_items = page_obj.object_list
v440hwme

v440hwme2#

您需要为page_obj %中的项目循环throw {%}

相关问题