Django分页显示问题:显示所有页码

时间:2011-04-18 22:06:51

标签: django pagination django-pagination

有没有办法让django分页的页面显示效果更好?我按照[doc] [1]创建它,但希望有简单的方法来组织页码显示。

目前,它显示所有页面,比如我有10页,然后是 prev 1 2 3 4 5 6 7 8 9 10 next

如果有100,那么它将显示全部100,这非常疯狂。

有什么方法可以简单地显示它吗?

示例:

prev 1 2 3 ... 67 ... 98,99,100 next(67是当前页)

prev 1 2 3 ... 65 66 67 68 69 ... 100 next

它不必看起来像上面的示例,但只是不希望它显示没有限制的每个页面编号。

就像文档一样,我使用下面的代码创建了我的分页。

模板文件

{% if is_paginated %}
<div id="pagination">
<ul>
    {% if page_obj.has_previous %}
        <li> <a href="?page={{page_obj.previous_page_number}}">Previous</a> </li>
    {% else %}
        <li> Previous</li>
    {% endif %}
    {% for page_number in paginator.num_pages|template_range %}
        {% ifequal page_number page_obj.number %}
            <li class="currentpage">{{page_number}}</li>
        {% else %}
            <li> <a href="?page={{page_number}}">{{page_number}}</a> </li>
        {% endifequal %}
    {% endfor %}
    {% if page_obj.has_next %}
        <li> <a href="?page={{page_obj.next_page_number}}">Next</a></li>
    {% else %}
        <li> Next </li>
    {% endif %}
</ul>
</div>
{% endif %}

Views.py

news = News.active.all().order_by("-created_at")
paginator = Paginator(news, 15)

is_paged = False
page = None

try:
    paginator.validate_number(currpage)
except (EmptyPage, InvalidPage):
    #return bad_or_missing(request, ("Invalid page number"))
    currpage = paginator.num_pages



is_paged = paginator.num_pages > 1
page = paginator.page(currpage)

ctx = RequestContext(request, {
    'all_news_list' : page.object_list,
    'is_paginated' : is_paged,
    'page_obj' : page,
    'paginator' : paginator,
    'featured_categories' : featured_categories,
})

response = render_to_response(template_name, context_instance=ctx)
return response

谢谢。

3 个答案:

答案 0 :(得分:4)

我已成功使用“Paginator Tag”来实现您正在寻找的分页风格(通常称为“Digg风格”分页)。用法在文章“A Recipe for Pagination in Django”中进行了解释。

答案 1 :(得分:1)

我使用了以下软件包,使用起来非常简单。 https://github.com/jamespacileo/django-pure-pagination

它解决了在模板中不显示每一页,而是显示范围的常见问题。

enter image description here

设置使这样的实现变得非常容易:

PAGINATION_SETTINGS = {
    'PAGE_RANGE_DISPLAYED': 10,
    'MARGIN_PAGES_DISPLAYED': 2,

    'SHOW_FIRST_PAGE_WHEN_INVALID': True,
}

答案 2 :(得分:0)

这是一个相当古老的问题,但如果有人正在寻找与Django 1.11及更高版本相关的解决方案,请参阅https://medium.com/@sumitlni/paginate-properly-please-93e7ca776432