У меня есть представление для отображения списка новостей:
def index(request, page_number=1):
news_list = get_list_or_404(NewsItem.objects.order_by('-pub_date'))
news_paginator = Paginator(news_list, 10)
return render(request, 'news/index.html', {'news_list': news_paginator.page(page_number))
Как видите, на каждой странице отображаются десять новостей.
Шаблон:
<div class="paginator">
<ul>
<!-- Left arrow -->
{% if news_list.has_previous %}
<li class="arrow"><a class="no_underline" href="{% url 'news:index' news_list.previous_page_number %}"><b>←</b></a></li>
{% else %}
<li class="arrow unavailable"><b>←</b></li>
{% endif %}
<!-- Page numbers -->
{% for page in news_list.paginator.page_range %}
{% if page == news_list.number %}
<li class="current"><a class="no_underline" href="{% url 'news:index' page %}">{{ page }}</a></li>
{% else %}
<li><a class="no_underline" href="{% url 'news:index' page %}">{{ page }}</a></li>
{% endif %}
{% endfor %}
<!-- Right arrow -->
{% if news_list.has_next %}
<li class="arrow"><a class="no_underline" href="{% url 'news:index' news_list.next_page_number %}"><b>→</b></a></li>
{% else %}
<li class="arrow unavailable"><b>→</b></li>
{% endif %}
</ul>
</div>
Это выглядит так:
← 1 2 3 4 5 6 7 8 →
Давайте представим, что есть 217 новостей, и я бы не сталне хотел бы иметь 21 номер страницы в нижней части списка.Вместо этого я бы предпочел установить ограничение: только 5 номеров страниц.Но этот предел должен быть стабильный , всегда должно быть 5 номеров страниц независимо от текущей позиции в списке страниц:
← 1 2 3 4 5→
← 11 12 13 14 15 → ( в середине списка )
← 17 18 19 20 21 → ( отображается последняя страница )
Как этого добиться?