Pagination¶
Pagination is easy, just call Table.paginate() and pass in the current
page number:
def people_listing(request):
table = PeopleTable(Person.objects.all())
table.paginate(page=request.GET.get("page", 1), per_page=25)
return render(request, "people_listing.html", {"table": table})
If you are using RequestConfig, pass pagination options to the constructor:
def people_listing(request):
table = PeopleTable(Person.objects.all())
RequestConfig(request, paginate={"per_page": 25}).configure(table)
return render(request, "people_listing.html", {"table": table})
If you are using SingleTableView, the table will get paginated by default:
class PeopleListView(SingleTableView):
table_class = PeopleTable
Disabling pagination¶
If you are using SingleTableView and want to disable the default behavior,
set SingleTableView.table_pagination = False
Lazy pagination¶
The default Paginator wants to count the number of items,
which might be an expensive operation for large QuerySets.
In those cases, you can use LazyPaginator, which does not perform a count,
but also does not know what the total amount of pages will be, until you’ve hit
the last page.
The LazyPaginator does this by fetching n + 1 records where the number of records
per page is n. If it receives n or less records, it knows it is on the last page,
preventing rendering of the ‘next’ button and further “…” ellipsis.
Usage with SingleTableView:
class UserListView(SingleTableView):
table_class = UserTable
table_data = User.objects.all()
paginator_class = LazyPaginator