我有一个用于显示新闻列表的视图:
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 →(显示最后一页)
我该如何实现?
答案 0 :(得分:0)
您可以尝试将其添加到您的views.py:
class Counter:
count = 0
def increment(self):
self.count += 1
return ''
然后将其添加到:
context = {'news_list': news_paginator.page(page_number),'Counter':Counter}
return render(request, 'news/index.html', context)
然后在您的html页面上:
{% for page in news_list.paginator.page_range %}
{% if page == news_list.number %}
{% if Counter.count < 6 %}
{{ Counter.increment }}
<li class="current"><a class="no_underline" href="{% url 'news:index' page %}">{{ page }}</a></li>
{% endif %}
{% else %}
<li><a class="no_underline" href="{% url 'news:index' page %}">{{ page }}</a></li>
{% endif %}
{% endfor %}