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 lazy QuerySet and pagination