Skip to content

Instantly share code, notes, and snippets.

@bmihelac
Created October 15, 2012 17:42
Show Gist options
  • Save bmihelac/3893918 to your computer and use it in GitHub Desktop.
Save bmihelac/3893918 to your computer and use it in GitHub Desktop.
Paginator with window options, for pinax-theme-bootstrap
from django import template
register = template.Library()
@register.assignment_tag
def page_range(page_obj, window=7):
"""
Return page numbers respecting window.
"""
last_page = page_obj.paginator.num_pages
start_page = max(page_obj.number - window, 1)
end_page = min(page_obj.number + window + 1, last_page)
page_numbers = range(start_page, end_page)
if 1 not in page_numbers:
page_numbers.insert(0, None)
page_numbers.insert(0, 1)
if last_page not in page_numbers:
page_numbers.append(None)
page_numbers.append(last_page)
return page_numbers
{% load i18n %}
{% load paginator_helper_tags %}
{% if is_paginated %}
{% page_range page_obj as page_range %}
<div class="pagination">
<ul>
{% if page_obj.has_previous %}
<li class="prev">
<a href="?page={{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}">← {% trans "Previous" %}</a>
</li>
{% else %}
<li class="prev disabled"><a>← {% trans "Previous" %}</a></li>
{% endif %}
{% for page in page_range %}
{% if page %}
<li class="{% ifequal page page_obj.number %}active{% endifequal %}"><a href="?page={{ page }}{{ getvars }}{{ hashtag }}">{{ page }}</a></li>
{% else %}
<li class="disabled"><a href="#">…</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li class="next"><a href="?page={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}">{% trans "Next" %} →</a></li>
{% else %}
<li class="next disabled"><a>{% trans "Next" %} →</a></li>
{% endif %}
</ul>
</div>
{% endif %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment