We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
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.
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.