2016-12-13 48 views
0

我在我的网站有一个分页,但它显示了我像1-19每一页,我只想显示只有5页。 enter image description hereDjango分页器页面范围不显示所有数字

我该怎么做?

views.py

paginator = Paginator(object_list, new_number_of_list) 

    page = request.GET.get('page') 

    try: 
     Items = paginator.page(page) 
    except PageNotAnInteger: 
     Items = paginator.page(1) 
    except EmptyPage: 
     Items = paginator.page(paginator.num_pages) 

    variables = RequestContext(request, {"Items": Items, 
             "ForItemCount": ForItemCount, 
             "page": page, 
             }) 
    return render(request, 'templates/Core/resource_base.html', 
          variables) 

我pagination.html

<div class="pagination p1"> 
    <span class="step-links"> 
    <ul> 

      {% for l in Items.paginator.page_range %} 
      <li><a href="?page={{forloop.counter}}">{{forloop.counter}}</a></li> 
      {% endfor %} 



    </ul> 
    </span> 
</div> 

回答

3

你已经在那里{{ forloop.counter }},您可以使用它限制在五。

 {% for l in Items.paginator.page_range %} 
     {% if forloop.counter < 5 %} 
      <li><a href="?page={{forloop.counter}}">{{forloop.counter}}</a></li> 
     {% endif %} 
     {% endfor %} 

这里是另一种解决办法,如果你有兴趣这可能给你一些更多的选择:Django Pagination Display Issue: all the page numbers show up

最后,这里是一个非常好的教程,了解django开箱即用的分页速度:https://simpleisbetterthancomplex.com/tutorial/2016/08/03/how-to-paginate-with-django.html

1

看看https://medium.com/@sumitlni/paginate-properly-please-93e7ca776432有帮助。该代码使用10作为“邻居”,但在使用标签时可以将其更改为5。

+0

这是一个很好的解决方案顺便说一句,但你的'link_name'工程错误。 此版本工作正确: '@ register.filter(名称= 'LINK_NAME') DEF LINK_NAME(路径,PAGE_NUMBER): URL =里urlparse(路径) QS = parse_qs(URL [4]) PAGE_NUMBER = STR( page_number) qs ['page'] = page_number return urlunparse((url [0],url [1],url [2],url [3],urlencode(qs),url [5])) ' –

+0

谢谢@elfuego,你能告诉我什么是失败的,需要你添加额外的代码,以及Django的版本是你在使用什么?我将它部署在生产站点上,没有遇到任何问题,但仅在1.11上进行了测试。 – LNI

+1

实际的问题是,每当你点击一个页面链接,一个额外的'&page = X'被添加到链接,所以最终你会得到'...?page = X&page = Y ...'。 我的Django版本是2.0.1,我的Python版本是'3.6.2'。 –