Django Pagination Display Issue: отображаются все номера страниц - PullRequest
10 голосов
/ 19 апреля 2011

Есть ли способ улучшить отображение страниц в Django? Я следовал [doc] [1], чтобы создать его, но надеялся, что есть простой способ организовать отображение номера страницы.

В настоящее время он показывает все страницы, скажем, у меня есть 10 страниц, затем
пред 1 2 3 4 5 6 7 8 9 10 след.

Если есть 100, то он покажет все 100, что довольно безумно.

Есть ли простой способ показать его короче?

пример:

пред 1 2 3 ... 67 ... 98, 99, 100 далее (67 - текущая страница)

пред 1 2 3 ... 65 66 67 68 69 ... 100 далее

Это не должно быть похоже на приведенные выше примеры, но просто не нужно, чтобы он отображал каждый номер страницы без ограничений.

Так же, как документ, я создал свою нумерацию страниц, используя приведенные ниже коды.

Файл шаблона

{% 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 ]

4 голосов
/ 19 апреля 2011

Я успешно использовал « Paginator Tag », чтобы достичь стиля нумерации страниц, который вы ищете (часто называемый «нумерацией в стиле Digg) Использование объясняется в статье " Рецепт для нумерации страниц в Django ".

1 голос
/ 14 марта 2018

Я использовал следующий пакет, и он удобен и прост в использовании. 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,
}
0 голосов
/ 24 января 2018

Это довольно старый вопрос, но если кто-то ищет решение, относящееся к Django 1.11 и более поздним версиям, см. https://medium.com/@sumitlni/paginate-properly-please-93e7ca776432

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...