django的分页在django视图中是如何工作的
How does django's pagination work in a django view
所以我正在阅读有关分页的内容,我已经多次编写此应用程序,但我想知道 django 中的分页如何在 sql 级别工作。
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
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})
是否每次我点击视图时都会调用 Contacts.objects.all()
?
还是 Paginator
以某种方式保持状态?对于 paginator = Paginator(contact_list, 25)
,sql 查询会是什么样子?是否在幕后使用了生成器并且对事物进行了延迟评估?
抱歉,如果这是一个愚蠢的问题,Django 中有很多抽象,我似乎错过了背后的所有动作。
提前致谢
我将重复发布 link 作为答案,因为你的问题的标题非常易读,而且你的所有问题都有答案
所以我正在阅读有关分页的内容,我已经多次编写此应用程序,但我想知道 django 中的分页如何在 sql 级别工作。
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
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})
是否每次我点击视图时都会调用 Contacts.objects.all()
?
还是 Paginator
以某种方式保持状态?对于 paginator = Paginator(contact_list, 25)
,sql 查询会是什么样子?是否在幕后使用了生成器并且对事物进行了延迟评估?
抱歉,如果这是一个愚蠢的问题,Django 中有很多抽象,我似乎错过了背后的所有动作。 提前致谢
我将重复发布 link 作为答案,因为你的问题的标题非常易读,而且你的所有问题都有答案