Как последовательно отображать по 5 элементов модели на странице и генерировать новые страницы при их недостатке (ссылками в навигации по страницам)?

Для последовательного отображения по 5 элементов модели на странице и генерации новых страниц при их недостатке в Django можно использовать пагинацию.

Django предоставляет удобный и гибкий инструмент для реализации пагинации с помощью класса Paginator из модуля django.core.paginator.

Вот пример последовательного отображения по 5 элементов модели, а также генерации новых страниц с помощью пагинации:

from django.core.paginator import Paginator
from django.shortcuts import render

def my_view(request):
    items_per_page = 5
    my_model_objects = MyModel.objects.all() # Получение всех объектов модели
    
    paginator = Paginator(my_model_objects, items_per_page) # Инициализация пагинатора
    
    page_number = request.GET.get('page') # Получение номера текущей страницы из GET параметров
    page_obj = paginator.get_page(page_number) # Получение объекта текущей страницы с помощью пагинатора
    
    context = {
        'page_obj': page_obj
    }
    
    return render(request, 'my_template.html', context)

В данном примере мы определяем количество элементов на одной странице (items_per_page), затем получаем все объекты модели MyModel и инициализируем пагинатор с помощью этих объектов.

Далее, получаем номер текущей страницы из параметра GET запроса (page_number) и используем пагинатор для получения объекта текущей страницы (page_obj).

Формируем контекст с объектом текущей страницы и передаем его в шаблон my_template.html с помощью функции render().

В шаблоне my_template.html вы можете использовать объект page_obj, чтобы отобразить элементы текущей страницы:

{% for item in page_obj %}
    <p>{{ item }}</p>
{% endfor %}

<div class="pagination">
    {% if page_obj.has_previous %}
        <a href="?page={{ page_obj.previous_page_number }}">previous</a>
    {% endif %}
    
    <span class="current-page">{{ page_obj.number }}</span>
    
    {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}">next</a>
    {% endif %}
</div>

В данном примере мы используем цикл for для вывода каждого элемента текущей страницы модели. Также мы выводим навигацию по страницам, которая представляет собой ссылки на предыдущую и следующую страницы.

Важно заметить, что параметр page в ссылках GET запроса используется для указания номера страницы, т.е. ?page=1, ?page=2 и т.д.

Таким образом, при обращении к данному представлению Django будет отображать по 5 элементов модели на странице и автоматически генерировать новые страницы при их недостатке, предоставляя ссылки в навигации по страницам для переключения между страницами.