不带整个queryset的Django分页
在Django中,我使用paginator,如下所示: 从django.core.paginator导入paginator、EmptyPage、PageNotAnInteger不带整个queryset的Django分页,django,optimization,Django,Optimization,在Django中,我使用paginator,如下所示: 从django.core.paginator导入paginator、EmptyPage、PageNotAnInteger def myView(request): ... paginator = Paginator(Annonce.objects.filter(name="huhu"), 10) paginator._count = s.count() try: annonces = pagi
def myView(request):
...
paginator = Paginator(Annonce.objects.filter(name="huhu"), 10)
paginator._count = s.count()
try:
annonces = paginator.page(page)
except PageNotAnInteger:
annonces = paginator.page(1)
except EmptyPage:
annonces = paginator.page(paginator.num_pages)
在s.search函数中,我对我的postgres数据库进行查询
结果表明,即使我每页显示10个项目,查询也不受限制
我试图用Annonce.objects.filtername=huhu[:10]限制查询,并自己指定计数。但是如果我这样做,分页器就不起作用了
有没有办法对此进行优化?将此示例用作编写适当使用django Paginator的视图函数的指南
请注意,在示例代码snippert中-
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page') # <--- This is the key to your solution.
contacts=paginator.pagepage对数据库执行查询,根据给定的页码,在每页需要25个对象的条件下,仅检索有限的对象集。将此示例用作编写适当使用django paginator的视图函数的指南
请注意,在示例代码snippert中-
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page') # <--- This is the key to your solution.
contacts=paginator.pagepage对数据库执行查询,根据给它的页码和每页需要25个对象的条件,只检索有限的对象集。您在上下文中放置了什么?你在重复什么?你在你的上下文中放了什么?你在重复什么?事实上你是对的。我的设计直接遵循您描述的设计。唯一让我认为在构造分页器时对结果进行了评估的区别是,我使用了一个缓存系统来处理结果。这在构造分页器时强制求值。此示例无法解决此问题,仍将调用计数查询。调用将调用Paginator.validate_number,它将调用Paginator.num_页面,它将调用count,而count仍将调用数据库上的total count。实际上,您是对的。我的设计直接遵循您描述的设计。唯一让我认为在构造分页器时对结果进行了评估的区别是,我使用了一个缓存系统来处理结果。这在构造分页器时强制求值。此示例无法解决此问题,仍将调用计数查询。调用将调用Paginator.validate_number,它将调用Paginator.num_页面,它将调用count,而count仍将调用数据库上的total count。