{# 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 %}