{% spaceless %}
{{ page_obj.paginator.per_page }}
{# previous link at first (disabled if no previous) #} {% if page_obj.has_previous %} {% else %} {% endif %} {% for number in page_obj.paginator.page_range %} {# always display current page, marked as active #} {% if number == page_obj.number %} {{ number }} {# for current page 1 or 2, display first 5 #} {% elif page_obj.number <= 2 and number <= 5 %} {{ number }} {# for current page last or next to last, display last 5 pages #} {% elif page_obj.number|add:1 >= page_obj.paginator.num_pages and number >= page_obj.paginator.num_pages|add:-4 %} {{ number }} {# display the two numbers before and after the current page #} {% elif page_obj.number|add:2 >= number and page_obj.number|add:-2 <= number %} {{ number }} {# always display the first page (not current page) #} {% elif forloop.first %} {{ number }} {# if there is a gap between 1 and group around current page #} {% if page_obj.number > 4 and page_obj.paginator.num_pages > 6 %} ... {% endif %} {# always display last page (not current, not around current page) #} {% elif forloop.last %} {# indicate if there is a gap between current and last #} {% if page_obj.number|add:3 < number and number > 6 %} ... {% endif %} {{ number }} {% endif%} {% endfor %} {# next link at end (disabled if no next) #} {% if page_obj.has_next %} {% else %} {% endif %}
{% endspaceless %}