Задать вопрос

Как сделать «компактную» пагинацию в django?

Всем привет.

Столкнулся с ситуацией, что у меня образовалось порядка 600 материалов, и если разбивать их по 25 на страницу, то получаем 24 страницы. И пагинация, которая представлена на официальном сайте django, дает нам все 24 страницы на сайте.

Не подскажите, как можно сделать это все дело компактно, чтобы допустим выводило первые три и последнюю страницу. И этот пузырик перемещался за страничками?

Пока в темплейте я использую вот такую штуку:

<div class="row">
                        <div class="small-12 medium-12 large-12 column pagination_forum_block">
                            <ul class="pagination">
                                {% if forumpage.has_previous %}
                                    <li class="arrow"><a href="?page={{ forumpage.previous_page_number }}"><i class="fa fa-angle-double-left" aria-hidden="true"></i></a></li>
                                {% else %}
            {#                        <li class="arrow unavailable"><a href="">&laquo;</a></li>#}
                                {% endif %}

                                {% for page in forumpage.paginator.page_range %}
                                    {% if page == forumpage.number %}
                                        <li class="current"><a href="?page={{ page }}">{{ page }}</a></li>
                                    {% else %}
                                        <li><a href="?page={{ page }}">{{ page }}</a></li>
                                    {% endif %}
                                {% endfor %}

                                {% if forumpage.has_next %}
                                    <li class="arrow"><a href="?page={{ forumpage.next_page_number }}"><i class="fa fa-angle-double-right" aria-hidden="true"></i></a></li>
                                {% else %}
            {#                        <li class="arrow unavailable"><a href="">&raquo;</a></li>#}
                                {% endif %}
                            </ul>
                        </div>
                    </div>


И получается вот так:

39bd50a2e5804ae29d24bf76e0bcb8f8.png

А хочется что-то более умное и компактное, так как верстка адаптивная и на малых экранах получается 3-4 ряда циферок.

----

После изучения множества вариантов (регистрация тега, плагины, кастомные решения). Сделал по рекомендации с этого поста: Корректировка пагинации в django? - просто, банально и эффективно. Все же проще и эффективней.
  • Вопрос задан
  • 1569 просмотров
Подписаться 3 Оценить 2 комментария
Решение пользователя sim3x К ответам на вопрос (3)
sim3x
@sim3x
Такое проще решить в верстке и/или в темплейте
https://stackoverflow.com/questions/25420470/limit...
esimakin.github.io/twbs-pagination

Сделай блок с линками на страницы и горизонтальный скролл
karaboz.ru/2007/11/19/paginator-3000-postranichnay...
https://github.com/Cosmologist/paginator3000

Или ограничь вывод линков со страницами
Для слайса +- 1 страница - использовать встроенное решение Page.has_previous + Page.previous_page_number https://docs.djangoproject.com/en/1.10/topics/pagi...

Если нужен слайс страниц больше чем +- 1 придется покопаться в следующих линках
Если их будет мало, то гуглим по django pagination digglike

https://www.djangosnippets.org/snippets/773/
stackoverflow.com/questions/30864011/display-only-...
stackoverflow.com/questions/1689365/show-page-item...
https://djangosnippets.org/snippets/1735/

stackoverflow.com/questions/5426525/django-paginat...

пс большая часть линков может быть устаревшей -- тестируй на здоровье :)
Ответ написан