在学习Django概念时,我在https://docs.djangoproject.com/en/2.2/topics/pagination/
上遇到了分页概念
我知道分页用于将模型的对象字段呈现为离散页面。
在文档中,作者提供了以下片段:
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25)
这基本上是加载模型Contacts
的所有对象,并将它们进行分页,以将每页大小限制为25。
我的问题是:假设我们在Contacts
模型下有数千个具有大TextField的对象,执行Contacts.objects.all()
将需要一些时间。在这种情况下,实现分页的最佳有效方法是什么,以便在Contacts.objects
上进行分页,而不是加载所有对象,然后传给分页器。
DjangoPaginator
(django.core.paginator.Paginator
(类在queryset上使用一个切片,该切片在数据库上作为LIMIT
查询运行,因此它不会获取所有实例然后获取子集,而是只使用LIMIT
从数据库中检索子集。在偏移的情况下,它使用LIMIT <> OFFSET <>
,所以这也是有效的。
Django查询集是惰性的,所以当你执行Contacts.objects.all()
并将其传递给分页器时,它不会被求值——当分页器实际尝试对它进行切片以获得给定页面所需的元素数量时,它会被求值。