我目前在一个电子商务网站上工作,我试图创建一个产品列表页面,该页面在显示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>
我真的很想知道我做错了什么,我也愿意用其他方法来解决同样的问题。谢谢
2条答案
按热度按时间zujrkrfu1#
您正在使用传递给分页器的所有查询集。您必须迭代page_obj.object_list。
v440hwme2#
您需要为page_obj %中的项目循环throw {%}