Объект типа '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>