为什么没有分页?

2024-05-17 05:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试开发一个网站,在那里我写了一个基于函数的视图,现在想添加分页。我遵循django文档,但它只是不在一起。有人能帮我吗? my views.py:

from django.shortcuts import render, Http404
from django.http import HttpResponse
from .models import Product
from django.core.paginator import Paginator

def home(request):
    products = Product.objects.all()
    paginator = Paginator(products, 6)

    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)

    return render(request, 'index.html', {'products': products})

Tags: django函数fromimport视图numberget网站
1条回答
网友
1楼 · 发布于 2024-05-17 05:26:21

首先,您可能希望将page参数转换为int

page_number = int(page_number)

然后,仍然将原始查询集传递给模板。要传递分页对象列表,请执行以下操作:

return render(request, 'index.html', {'products': page_obj.object_list})

或者更有用的是,传递页面对象:

return render(request, 'index.html', {'page_obj': page_obj})

这样,您就有了访问对象列表的所有信息,还可以构建下一个和上一个链接

更方便的是,您可以使用^{}类:

class HomeView(ListView):
    model = Product
    paginate_by = 6
    context_object_name = 'products'
    template_name = 'index.html'

如果查看代码,您甚至不必重写任何默认行为,因此可以直接使用ListView中的urls

urlpatterns = [
    # ...
    path('', ListView.as_view(model=Product, 
                              paginate_by=6, 
                              context_object_name='products', 
                              template_name='index.html'), name='index')
    # ...
]

相关问题 更多 >