B
B
Bulbashful2016-04-27 22:29:12
Django
Bulbashful, 2016-04-27 22:29:12

Adjusting pagination in django?

There is such a code

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})

And such a pattern
<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>

How do I implement the pagination plan "1.. 5 6 7..10"? In the standard way it turns out like thisf67ababc06f9408697e671e811ea3248.png

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sergey Gornostaev, 2016-04-28
@Bulbashful

For example, a piece from my old code:

<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>

It turns out here is a pagination ef086be9918f47099a2dc17857a32883.png
Add elements for the first and last page is not so hard, if necessary.
Or you can use this recipe .

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question