在 Django 中更有效的分页方式
More efficient way of paginating in Django
我正在尝试在 django 项目中实现分页。
我查看了 default django paginator 并找到了这个例子:
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page')
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contacts = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
contacts = paginator.page(paginator.num_pages)
return render_to_response('list.html', {"contacts": contacts})
看起来它从数据库中获取了所有对象,并且 return 将需要的对象添加到模板中。
效率不是很高吧?
我也看了django-endless-pagination,好像真的很难定制。
我正在寻找易于定制的解决方案,因为我会将其与 haystack
和 elasticsearch
集成
我还能用什么?
Paginator 不会获取所有对象。与您的情况一样,您要求 25 个对象。因此,每个页面将包含 25 个对象。当您尝试访问下一页时,将发送一个新的数据库请求来访问对象 26-50.
我正在尝试在 django 项目中实现分页。
我查看了 default django paginator 并找到了这个例子:
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page')
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contacts = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
contacts = paginator.page(paginator.num_pages)
return render_to_response('list.html', {"contacts": contacts})
看起来它从数据库中获取了所有对象,并且 return 将需要的对象添加到模板中。
效率不是很高吧?
我也看了django-endless-pagination,好像真的很难定制。
我正在寻找易于定制的解决方案,因为我会将其与 haystack
和 elasticsearch
我还能用什么?
Paginator 不会获取所有对象。与您的情况一样,您要求 25 个对象。因此,每个页面将包含 25 个对象。当您尝试访问下一页时,将发送一个新的数据库请求来访问对象 26-50.