我想展示分类产品和分页

  • 本文关键字:分页 分类 python django
  • 更新时间 :
  • 英文 :


我想显示按类别的产品,必须是分页的,但它不起作用。我试着这样做,但我不知道为什么不起作用。这里我有allProducts变量,我试图分配分页类,但我认为我这样做的方式可能是正确的,但它现在正在工作,请给我这个的解决方案

这是我的Views.py

def get(self, request):
cart = request.session.get('cart')
if not cart:
request.session['cart'] = {}
#products = None


products = Product.objects.all()
catsProduct = Product.objects.values("category")
cats = {item["category"] for item in catsProduct}
allProducts = []
for cat in cats:
prods = Product.objects.filter(category=cat)
allProducts.append(prods)



allProducts = Product.get_all_products()
paginator = Paginator(allProducts, 12)
page_number = request.GET.get('page')
allProducts = paginator.get_page(page_number)

cats = Category.get_categories()
brands = Brand.get_brands()
sliders = Slider.objects.all()
offers = Offer.objects.all()
categoryID = request.GET.get('category')
brandID = request.GET.get('brand')
if categoryID:
# products = Product.get_products_by_category(categoryID)
products = products.filter(category__id=categoryID)
# else:
#   products = Product.get_all_products()
if brandID:
# proucts = Product.get_brands_by_products(brandID)
products = products.filter(brand__id=brandID)
# else:
#   products = Product.get_all_products()
# print(request.session['customer'])
args = {
'products': products,
'cats': cats,
'brands': brands,
'sliders': sliders,
'offers': offers,
'allProducts':allProducts
}
return render(request, 'Home/index.html', args)
Django已经为您提供了分页功能。你可以查看这个分页django分页

我建议您使用基于类的视图,并使用ListView、继承该视图

现在,在get_context_data方法中,获取要在模板上呈现的查询集,并使用django-paginator来呈现它们。以下是我如何实现的。

from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger
class ApplyTasksListView(LoginRequiredMixin, UserPorfileExistsMixin, 
UserPorfileIsApprovedMixin, UserPorfileActiveMixin,
ListView):
template_name = 'freelancer/eligible_tasks.html'
model = Task
paginate_by = 10
def get_context_data(self, **kwargs):
context = super(ApplyTasksListView, self).get_context_data(**kwargs)
curr_user = self.request.user
now = timezone.now()
task = Task.objects.filter(freelancer_assigned=None, deadline__gte=now).exclude(
applied_by=curr_user).order_by('created_at').distinct()
paginator = Paginator(task, self.paginate_by)
page = self.request.GET.get('page')
try:
task_qs = paginator.page(page)
except PageNotAnInteger:
task_qs = paginator.page(1)
except EmptyPage:
task_qs = paginator.page(paginator.num_pages)
context['task_qs'] = task_qs
return context

最新更新