[Solved]-Dynamic pagination using Generic ListView

21👍

I just recently had to do this. You can override the get_paginate_by function to grab a query string parameter. Here’s a basic example.

Class AssistantList(ListView):
    template_name = "register/assistant_list.html"
    context_object_name = 'assistant_list'
    paginate_by = 25

    def get_paginate_by(self, queryset):
        """
        Paginate by specified value in querystring, or use default class property value.
        """
        return self.request.GET.get('paginate_by', self.paginate_by)

Then in our html we have a dropdown selection where the user can choose the number of items to view.

<form action="." method="get">
    <select name="paginate_by">
        <option>25</option>
        <option>50</option>
        <option>75</option>
        <option>100</option>
    </select>
</form>

We added some javascript to make it auto-submit and you’ll want to pass the paginate_by through to the context so you can make sure it continues to get passed from page to page.

Leave a comment