Skip to content

Instantly share code, notes, and snippets.

@dlyapun
Created March 24, 2017 12:34
Show Gist options
  • Save dlyapun/5c962f2b4aa7471fd3796a7ac1fa5bd4 to your computer and use it in GitHub Desktop.
Save dlyapun/5c962f2b4aa7471fd3796a7ac1fa5bd4 to your computer and use it in GitHub Desktop.
Good Django Pagination
< Django view >
paginator = Paginator(data['photos'], PAGINATE_BY)
page = request.GET.get('page', 1)
try:
data['photos'] = paginator.page(page)
except PageNotAnInteger:
data['photos'] = paginator.page(1)
except EmptyPage:
data['photos'] = paginator.page(paginator.num_pages)
data['photos'].paginator.show_pages = int(page) + 4
< HTML Template >
{% if photos.has_previous %}
<a href="?page={{ photos.previous_page_number }}"><button class="btn btn-success mt-2 mb-2">Previous</button></a>
{% endif %}
{% for index in photos.paginator.page_range %}
{% if photos.number == index %}
<button class="btn btn-success mt-2 mb-2" disabled="disabled">{{ photos.number }}</button>
{% else %}
{% if not index < photos.number and index < photos.paginator.show_pages %}
<a href="?page={{ index }}"><button class="btn btn-success mt-2 mb-2">{{ index }}</button></a>
{% endif %}
{% endif %}
{% endfor %}
{% if photos.paginator.show_pages <= photos.paginator.num_pages %}
{% if photos.paginator.show_pages < photos.paginator.num_pages %}
<span>...</span>
{% endif %}
<a href="?page={{ photos.paginator.num_pages }}"><button class="btn btn-success mt-2 mb-2">{{ photos.paginator.num_pages }}</button></a>
{% endif %}
{% if photos.has_next %}
<a href="?page={{ photos.next_page_number }}"><button class="btn btn-success mt-2 mb-2">Next</button></a>
{% endif %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment