Сундарам | 25 мая 2020 г., 23:14

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

Разбивка на страницы в той или иной форме используется почти в каждом веб-приложении для разделения возвращаемых данных и их отображения на нескольких страницах.

Это делает нашу веб-страницу динамичной и эффективной.

В этой статье мы добавим нумерацию страниц в нашу модель поста, которую мы построили ранее, если вы новичок в этом посте, поэтому прочитайте эту статью.

Вышеупомянутый проект сделан на Python 3.8, Django 3.1 и Bootstrap 4.0. В этом приложении блога у вас есть много сообщений, которые вы будете показывать, но если вы отображаете все данные на одной странице, это может увеличить время загрузки нашей страницы, по этой причине мы используем нумерацию страниц.

Добавление разбивки на страницы в представлениях на основе классов [ ListView ]

Класс Django ListView поставляется со встроенной поддержкой разбивки на страницы, поэтому все, что нам нужно сделать, это воспользоваться ею. Разбивка на страницы управляется параметром GET, который определяет, какую страницу показывать.

blogapp/views.py
from django.views import generic
from .models import Post
class PostList(generic.ListView):
     queryset = Post.objects.filter(status=1).order_by('-created_on')
     template_name = 'index.html' 
     paginate_by = 3 
class PostDetail(generic.DetailView):
    model = Post
    template_name = 'detail.html'

Теперь в представлении PostList мы введем новый атрибут paginate_by , который принимает целое число, указывающее, сколько объектов должно отображаться на странице. Если это задано, представление будет разбивать объекты на страницы с количеством объектов paginate_by на страницу. Представление будет ожидать либо параметр строки запроса страницы (через request.GET), либо переменную page, указанную в URLconf.

class PostList(generic.ListView): queryset = Post.objects.filter(status=1).order_by('-created_on') template_name = 'index.html' paginate_by = 3

Теперь наши посты разбиты на страницы по 3 поста на страницу.

Затем, чтобы увидеть разбиение на страницы в действии, нам нужно отредактировать шаблон, который для этого приложения представляет собой файл index.html, и вставить приведенный ниже фрагмент.

{% if is_paginated %}
 <nav aria-label="Page navigation conatiner">
</nav> 
<ul class="pagination justify-content-center">
 {% if page_obj.has_previous %} 
<li>
    <a href="?page={{ page_obj.previous_page_number }}" class="page-link">&laquo; PREV </a>
</li> 
{% endif %}
{% if page_obj.has_next %} 
<li>
<a href="?page={{ page_obj.next_page_number }}" class="page-link"> NEXT &raquo;</a>
</li> 
{% endif %} 
</ul>
</nav> 
</div>
{% endif %}

Здесь мы будем использовать Bootstrap 4.1, используйте с сайта начальной загрузки, если вы используете разные версии.

Теперь запустите сервер и посетите http://127.0.0.1:8000/, вы должны увидеть кнопки навигации по страницам, добавленные к сообщениям.

Спасибо за чтение

Первоначально опубликовано на http://www.bloggystacker.com.