Here's a simple recipe to add pagination to a Wagtail page:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from wagtail.core.models import Page class BlogIndexPage(Page): def get_context(self, request, *args, **kwargs): context = super(BlogIndexPage, self).get_context(request) all_posts = BlogIndexPage.objects.posts(self, request=request) max_items_per_page = 10 paginator = Paginator(all_posts, max_items_per_page) page = request.GET.get('page') try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) context['posts'] = posts return context
In the template, you can have:
{% load wagtailcore_tags %} {% if items.paginator.num_pages > 1 %} <nav id="post-nav"> <span class="prev"> {% if items.has_previous %} <a href="?page={{ items.previous_page_number }}">Newer posts</a> {% endif %} </span> {% for page_num in items.paginator.page_range %} {% if page_num == resources.number %} {{ page_num }} {% else %} <a href="?page={{ page_num }}">{{ page_num }}</a> {% endif %} {% endfor %} <span class="next"> {% if items.has_next %} <a href="?page={{ items.next_page_number }}">Older posts</a> {% endif %} </span> </nav> {% endif %}
This will give you the previous and next links and the full list of pages.