I am trying to implement pagination in a django project.
I looked at default django paginator and found this example:
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})
It looks like it gets ALL the objects from the database and return the needed ones to the template.
That is not very efficient right?
I also looked at django-endless-pagination which seemed really difficult to customize.
I am looking for easily customizable solution as I will integrate it with haystack
and elasticsearch
What else can I use?
Paginator won't get all the objects. As in your case, you asked for 25 objects. Thus, each page will contain 25 objects. When you try to access the next page, a new DB request will be sent to access objects 26-50.