python-Django 高级特性-Django 分页(二)

2023-04-24 00:13:14 浏览数 (1)

分页示例

下面是一个完整的分页示例,演示如何使用Django的分页功能来呈现数据库中的对象列表。假设我们有一个简单的博客应用程序,其中有一个Post模型表示博客文章。我们想要在网站上显示最近的10篇文章,并在每页中显示5篇文章。下面是我们如何实现分页:

代码语言:javascript复制
from django.core.paginator import Paginator
from django.shortcuts import render
from myapp.models import Post

def post_list(request):
    posts = Post.objects.order_by('-created_at')[:10]
    paginator = Paginator(posts, 5)
    page_number = request.GET.get('page')
    page = paginator.get_page(page_number)
    return render(request, 'post_list.html', {'page': page})

在上面的代码中,我们首先获取最近的10篇文章,并按照创建时间的逆序进行排序。然后,我们使用Paginator对象创建一个分页对象,并将每页显示的文章数量设置为5。接下来,我们从请求的GET参数中获取页码,并使用get_page方法获取当前页的文章列表。最后,我们将分页对象作为上下文传递给post_list.html模板进行呈现。

在模板中,我们可以使用以下代码来呈现分页链接和文章列表:

代码语言:javascript复制
{% if page.has_previous %}
    <a href="?page={{ page.previous_page_number }}">上一页</a>
{% endif %}

{% for post in page %}
    <div>
        <h2>{{ post.title }}</h2>
        <p>{{ post.content }}</p>
    </div>
{% endfor %}

{% if page.has_next %}
    <a href="?page={{ page.next_page_number }}">下一页</a>
{% endif %}

在上面的代码中,我们首先使用page.has_previouspage.has_next方法检查是否有前一页和后一页。如果有,我们可以使用page.previous_page_numberpage.next_page_number方法获取前一页和后一页的页码。然后,我们使用for循环遍历当前页的文章,并将每篇文章的标题和内容呈现出来。最后,我们在页面底部再次检查是否有下一页,如果有,我们可以使用相同的方法获取下一页的页码。

0 人点赞