Django 分页问题 - 初学者
Django Pagination Issues - Beginner
我正在用 Django 做一个项目,第一次学习分页。到目前为止,我已经阅读了很多文档,但仍然无法正常工作。我不知道我做错了什么。任何见解都是有帮助的。据我了解,这应该只会让页面上出现 3 个帖子。相反,所有的帖子都会出现。我想让页面上一次只显示 3 个帖子。我对此没有任何错误。我只看到页面上的所有帖子。
views.py
from .models import User, Post
from django.core.paginator import Paginator
def index(request):
list_of_posts = Post.objects.all().order_by('id').reverse()
paginator = Paginator(list_of_posts, 3)
page_number = request.GET.get('page', 1)
page_obj = paginator.get_page(page_number)
return render(request, "network/index.html", {
"list_of_posts": list_of_posts,
"page_obj": page_obj
})
分页的 html 部分:
{% extends "network/layout.html" %}
{% load static %}
{% block body %}
<h3> Welcome. Here is your news feed: </h3>
{% for i in list_of_posts %}
<div class='card mb-3' style="max-width: 530px;" id="card-posts">
<div class="row no-gutters">
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title"><a href="{% url 'profile' username=i.username %}">{{i.username}}</a></h5>
<p class="card-text">{{i.text}}</p>
<p class="card-text">{{i.timestamp}}</p>
<p class="card-text">{{i.amount_likes}}</p>
</div>
</div>
</div>
</div>
{% endfor %}
<br><br>
{% endblock %}
<div class="container">
<ul class="pagination justify-content-center">
{% if page_obj.has_previous %}
<li class="page-item"><a href="?page=1" class="page-link">« First</a></li>
<li class="page-item"><a href="?page={{ page_obj.previous_page_number }}"
class="page-link">Previous</a></li>
{% else %}
<li class="page-item disabled"><a class="page-link">« First</a></li>
<li class="page-item disabled"><a class="page-link">Previous</a></li>
{% endif %}
{% if page_obj.number %}
<li class="page-item"><a class="page-link">{{ page_obj.number }}</a></li>
{% else %}
<li class="page-item"><a class="page-link">0</a></li>
{% endif %}
{% if page_obj.has_next %}
<li class="page-item"><a href="?page={{ page_obj.next_page_number }}" class="page-link">Next</a></li>
<li class="page-item"><a href="?page={{ page_obj.paginator.num_pages }}" class="page-link">Last »</a></li>
{% else %}
<li class="page-item disabled"><a class="page-link">Next</a></li>
<li class="page-item disabled"><a class="page-link">Last »</a></li>
{% endif %}
</ul>
</div>
您正在遍历错误的变量 list_of_posts
是行中定义的查询集:
list_of_posts = Post.objects.all().order_by('id').reverse()
但是您想遍历分页查询集,这可以通过遍历 page_obj
来完成。因此你的循环应该是这样的:
{% for i in page_obj %}
...
{% endfor %}
我正在用 Django 做一个项目,第一次学习分页。到目前为止,我已经阅读了很多文档,但仍然无法正常工作。我不知道我做错了什么。任何见解都是有帮助的。据我了解,这应该只会让页面上出现 3 个帖子。相反,所有的帖子都会出现。我想让页面上一次只显示 3 个帖子。我对此没有任何错误。我只看到页面上的所有帖子。
views.py
from .models import User, Post
from django.core.paginator import Paginator
def index(request):
list_of_posts = Post.objects.all().order_by('id').reverse()
paginator = Paginator(list_of_posts, 3)
page_number = request.GET.get('page', 1)
page_obj = paginator.get_page(page_number)
return render(request, "network/index.html", {
"list_of_posts": list_of_posts,
"page_obj": page_obj
})
分页的 html 部分:
{% extends "network/layout.html" %}
{% load static %}
{% block body %}
<h3> Welcome. Here is your news feed: </h3>
{% for i in list_of_posts %}
<div class='card mb-3' style="max-width: 530px;" id="card-posts">
<div class="row no-gutters">
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title"><a href="{% url 'profile' username=i.username %}">{{i.username}}</a></h5>
<p class="card-text">{{i.text}}</p>
<p class="card-text">{{i.timestamp}}</p>
<p class="card-text">{{i.amount_likes}}</p>
</div>
</div>
</div>
</div>
{% endfor %}
<br><br>
{% endblock %}
<div class="container">
<ul class="pagination justify-content-center">
{% if page_obj.has_previous %}
<li class="page-item"><a href="?page=1" class="page-link">« First</a></li>
<li class="page-item"><a href="?page={{ page_obj.previous_page_number }}"
class="page-link">Previous</a></li>
{% else %}
<li class="page-item disabled"><a class="page-link">« First</a></li>
<li class="page-item disabled"><a class="page-link">Previous</a></li>
{% endif %}
{% if page_obj.number %}
<li class="page-item"><a class="page-link">{{ page_obj.number }}</a></li>
{% else %}
<li class="page-item"><a class="page-link">0</a></li>
{% endif %}
{% if page_obj.has_next %}
<li class="page-item"><a href="?page={{ page_obj.next_page_number }}" class="page-link">Next</a></li>
<li class="page-item"><a href="?page={{ page_obj.paginator.num_pages }}" class="page-link">Last »</a></li>
{% else %}
<li class="page-item disabled"><a class="page-link">Next</a></li>
<li class="page-item disabled"><a class="page-link">Last »</a></li>
{% endif %}
</ul>
</div>
您正在遍历错误的变量 list_of_posts
是行中定义的查询集:
list_of_posts = Post.objects.all().order_by('id').reverse()
但是您想遍历分页查询集,这可以通过遍历 page_obj
来完成。因此你的循环应该是这样的:
{% for i in page_obj %}
...
{% endfor %}