首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有整个查询集的Django分页

没有整个查询集的Django分页
EN

Stack Overflow用户
提问于 2012-11-04 08:15:35
回答 1查看 5.6K关注 0票数 1

在Django中,我使用如下分页器:

从django.core.paginator导入分页器、EmptyPage、PageNotAnInteger

代码语言:javascript
复制
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.filter(name="huhu")[:10]限制查询,并自己指定计数。但是如果我这样做了,分页器就不能工作了。

有没有办法对此进行优化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-04 10:13:24

使用这个示例https://docs.djangoproject.com/en/dev/topics/pagination/#using-paginator-in-a-view作为编写适当使用django Paginator的视图函数的指南。

请注意,在示例代码snippert中-

代码语言:javascript
复制
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.

contact_list是一个指定的查询集,它实际上还没有被计算过。对Paginator instancepaginator = Paginator(contact_list, 25)赋值是惰性的,除非迫不得已,否则不会真正执行。

page = request.GET.get('page')从你的url中获取额外的GET变量?page=2 (例如)。当我们尝试检索应该出现在列表页面(第2页)上的25个对象时,url实际上看起来类似于http://localhost:8000/my/listing?page=2

这是执行对数据库的实际查询的地方:

代码语言:javascript
复制
try:
    contacts = paginator.page(page)
except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    contacts = paginator.page(1)

contacts = paginator.page(page)执行对数据库的查询,根据提供给它的页码和我们希望每页"25“个对象的条件,仅检索有限的对象集。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13214834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档