为什么它没有分页?
Why is it not getting paginated?
我正在尝试开发一个网站,我在其中编写了一个基于函数的视图,现在想在 django 文档之后添加 pagination.I',但它没有组合在一起。谁能帮帮我吗?
我的 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})
首先,您可能希望将 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})
这样一来,您就拥有了访问对象列表的所有信息,而且还可以构建下一个和上一个链接。
更方便的是,你可以使用ListView
class:
class HomeView(ListView):
model = Product
paginate_by = 6
context_object_name = 'products'
template_name = 'index.html'
鉴于您查看代码,您甚至不必覆盖任何默认行为,因此您可以直接在 urls
:
中使用 ListView
urlpatterns = [
# ...
path('', ListView.as_view(model=Product,
paginate_by=6,
context_object_name='products',
template_name='index.html'), name='index')
# ...
]
我正在尝试开发一个网站,我在其中编写了一个基于函数的视图,现在想在 django 文档之后添加 pagination.I',但它没有组合在一起。谁能帮帮我吗? 我的 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})
首先,您可能希望将 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})
这样一来,您就拥有了访问对象列表的所有信息,而且还可以构建下一个和上一个链接。
更方便的是,你可以使用ListView
class:
class HomeView(ListView):
model = Product
paginate_by = 6
context_object_name = 'products'
template_name = 'index.html'
鉴于您查看代码,您甚至不必覆盖任何默认行为,因此您可以直接在 urls
:
ListView
urlpatterns = [
# ...
path('', ListView.as_view(model=Product,
paginate_by=6,
context_object_name='products',
template_name='index.html'), name='index')
# ...
]