@Bulbashful

Корректировка пагинации в django?

Есть такой код
def articles(request):
    all_articles = Article.objects.all()
    try:
        page = request.GET.get('page')
    except:
        page = 1
    paginator = Paginator(all_articles,1)
    try:
        articless = paginator.page(page)
    except PageNotAnInteger:
        articless = paginator.page(1)
    except EmptyPage:
        articless = paginator.page(paginator.num_pages)
    return render_to_response('articles.html',{'articless':articless})

И такой шаблон
<nav class="text-center">
<ul class="pagination">
   {% if articless.has_previous %}
    <li><a href="?page={{articless.previous_page_number}}">&laquo;</a></li>
    {% else %}
    <li class="disabled"><a href="">&laquo;</a></li>
    {% endif %}
    {% for page in articless.paginator.page_range %}
                    {% if page == articless.number %}
                        <li class="active"><a>{{ page }}</a></li>
                    {% else %}
                        <li><a href="?page={{ page }}">{{ page }}</a></li>
                    {% endif %}
                {% endfor %}
    {% if articless.has_next %}
    <li><a href="?page={{articless.next_page_number }}">&raquo;</a></li>
    {% else %}
    <li class="disabled"><a href="">&raquo;</a></li>
    {% endif %}
</ul>
   </nav>

Как мне реализовать разбивку страниц плана " 1.. 5 6 7 ..10"? Стандартным путём получается так f67ababc06f9408697e671e811ea3248.png
  • Вопрос задан
  • 1091 просмотр
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Для примера кусок из моего старого кода:
<div class="page-nav">
    {% if paginator.page.has_previous %}
    <!-- Показывам кнопку со ссылкой, если есть предыдущая страница -->
    <a href="{% url 'newslines:show_page' paginator.page.previous_page_number %}">&lt;&nbsp; Вперед</a>
    {% else %}
    <!-- Показываем неактивную кнопку, если предыдущей страницы нет -->
    <span>&lt;&nbsp; Вперед</span>
    {% endif %}
    
    <!-- Прибавляем к номеру текущей страницы -4 (т.е. отнимаем 4) -->
    {% if paginator.page.number|add:'-4' > 0 %} 
    <!-- Если до текущей страницы есть больше 4 страниц, показываем многоточие -->
    <span class="ellipsis">...</span>
    {% endif %}
    
    {% if paginator.page.number|add:'-3' > 0 %}
    <!-- Если до текущей страницы есть ещё три страницы -->
    <a href="{% url 'newslines:show_page' paginator.page.number|add:'-3' %}">{{ paginator.page.number|add:'-3' }}</a>
    {% endif %}
    {% if paginator.page.number|add:'-2' > 0 %}
    <!-- Если до текущей страницы есть ещё две страницы -->
    <a href="{% url 'newslines:show_page' paginator.page.number|add:'-2' %}">{{ paginator.page.number|add:'-2' }}</a>
    {% endif %}
    {% if paginator.page.number|add:'-1' > 0 %}
    <!-- Если до текущей страницы есть ещё одна страница -->
    <a href="{% url 'newslines:show_page' paginator.page.number|add:'-1' %}">{{ paginator.page.number|add:'-1' }}</a>
    {% endif %}
    
    <!-- Номер текущей страницы -->
    <span>{{ paginator.page.number }}</span>
    
    {% if paginator.page.number|add:'1' <= paginator.num_pages %}
    <!-- Если после текущей страницы есть ещё одна страница -->
    <a href="{% url 'newslines:show_page' paginator.page.number|add:'1' %}">{{ paginator.page.number|add:'1' }}</a>
    {% endif %}
    {% if paginator.page.number|add:'2' <= paginator.num_pages %}
    <!-- Если после текущей страницы есть ещё две страницы -->
    <a href="{% url 'newslines:show_page' paginator.page.number|add:'2' %}">{{ paginator.page.number|add:'2' }}</a>
    {% endif %}
    {% if paginator.page.number|add:'3' <= paginator.num_pages %}
    <!-- Если после текущей страницы есть ещё три страницы -->
    <a href="{% url 'newslines:show_page' paginator.page.number|add:'3' %}">{{ paginator.page.number|add:'3' }}</a>
    {% endif %}
    
    {% if paginator.page.number|add:'4' <= paginator.num_pages %}
    <!-- Если после текущей страницы есть ещё четыре страницы -->
    <span class="ellipsis">...</span>
    {% endif %}    
    
    {% if paginator.page.has_next %}
    <!-- Показывам кнопку со ссылкой, если есть следующая страница -->
    <a href="{% url 'newslines:show_page' paginator.page.next_page_number %}">Назад &nbsp;&gt;</a>
    {% else %}
    <!-- Если нет следующей страницы -->
    <span>Назад &nbsp;&gt;</span>
    {% endif %}
</div>


Получается вот такая пагинация ef086be9918f47099a2dc17857a32883.png
Добавить элементы для первой и последней страницы не так тяжело, если надо.

Либо можно воспользоваться этим рецептом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 апр. 2024, в 20:09
9000 руб./за проект
28 апр. 2024, в 19:54
2000 руб./за проект
28 апр. 2024, в 19:54
5000 руб./за проект