2015-06-08 12 views
1

我想在django项目中实现分页。在Django中更有效的分页方式

我看着default django paginator,发现这个例子:

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}) 

它看起来像它会从数据库中所有对象和所需的人返回到模板。

这不是很有效吗?我也看着django-endless-pagination这似乎很难定制。

我找的,我将它haystackelasticsearch

我还能用轻松集成定制的解决方案?

+2

Paginator没有得到所有的对象https://github.com/django/django/blob/master/django/core/paginator.py#L55 – f43d65

+0

@ f43d65,当然哦!请将其写为答案,以便我可以接受。谢谢 –

回答

2

Paginator不会获取所有对象。就你的情况而言,你要求提供25个对象。因此,每个页面将包含25个对象。当您尝试访问下一页时,会发送一个新的数据库请求以访问对象26-50。