Объект типа 'function' не имеет len() в django

Я использую книгу Django 4 для изучения Django, но у меня возникают ошибки при пагинации

TypeError at /blog/

У объекта типа 'function' нет len()

views.py

from django.shortcuts import render, get_object_or_404
from django.http import Http404
from .models import Post
from django.core.paginator import Paginator

def post_list(request):
    posts = Post.published.all()
    # Pagination with 3 posts per page
    paginator = Paginator(post_list, 3)
    page_number = request.GET.get('page', 1)
    posts = paginator.page(page_number)
    return render(request,'blog/post/list.html',{'posts': posts})

файл paginations.html

<div class="pagination">
<span class="step-links">
{% if page.has_previous %}
<a href="?page={{ page.previous_page_number }}">Previous</a>
{% endif %}

  <span class="current">
   <p>Page {{ page.number }} of {{ page.paginator.num_pages }}.</p> 
    </span>
    {% if page.has_next %}
    <a href="?page={{ page.next_page_number }}">Next</a>
    {% endif %}
    </span>
    </div>

Вы пагинируете функцию просмотра, а не набор запросов, вам следует использовать posts вместо post_list:

def post_list(request):
    posts = Post.published.all()
    # Pagination with 3 posts per page
    paginator = Paginator(post, 3)
    page_number = request.GET.get('page', 1)
    posts = paginator.page(page_number)
    return render(request, 'blog/post/list.html', {'posts': posts})

в шаблоне объект страницы имеет имя posts, поэтому:

<div class="pagination">
  <span class="step-links">
  {% if posts.has_previous %}
    <a href="?page={{ posts.previous_page_number }}">Previous</a>
  {% endif %}
  </span>
  <p>
    <span class="step-links">Page {{ posts.number }} of {{ posts.paginator.num_pages }}.</span>
  </p>
  {% if posts.has_next %}
    <a href="?page={{ posts.next_page_number }}">Next</a>
  {% endif %}
</div>
Вернуться на верх