美文网首页
1.8 添加分页器

1.8 添加分页器

作者: gznb | 来源:发表于2020-07-20 16:30 被阅读0次

1. 添加分页器

当你开始在你的博客中添加内容时,您可能很容易在数据库中存储数十或数百篇文章的地步。与在单个页面上显示所有文章不同,您可能希望将文章列表拆分为多个页面。这就需要通过分页器来实现,你可以通过定义一个数字去用于你想要在一个页面上显示文章数量,并且展示与用户请求的页面对应的帖子。Django 提供了一个内置的分页器,它允许你很简单的管理分页数据。

在你的 blog 应用程序中编辑 views.py 文件,去导入一个 Django 分页类,并且修改 post_list 视图。 如下所示:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def post_list(request):
    object_list = Post.published.all()
    paginator = Paginator(object_list, 3)  # 每 3 篇博客一页
    page = request.GET.get('page')

    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        # 如果页面不是整数,就返回第一页
        posts = paginator.page(1)
    except EmptyPage:
        #  如果页面超出范围,就提交结果的最后一页
        posts = paginator.page(paginator.num_pages)

    return render(request,
                  'blog/post/list.html',
                  {'posts': posts,
                   'page': page})

接下来介绍 分页器是如何工作的:

    1. 你通过每页想要显示的文章数量 根据 Paginator 类实例化一个对象。
    1. 你得到 page.GET 参数,它表示当前页码。
    1. 通过调用 Paginatorpage() 方法,可以获得所需页面的对象。
    1. 如果 page 参数不是一个整数,就返回结果的第一页。如果这个参数是一个超过了结果最后一页的大整数,就返回最后一个的结果。
    1. 将页码和检索到的对象传递给模板。

现在你将要创建用于显示分页的模板,以至于可以把这个模板应用于任何想要分页的模板中。 在 blog 应用程序的 templates/ 目录中,创建一个名称为 pagination.html 的新文件,添加下面的这些 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">
                Page {{ page.number }} of {{ page.paginator.num_pages }}.
            </span>
        {% if page.has_next %}
            <a href="?page={{ page.next_page_number }}">Next</a>
        {% endif %}
    </span>
</div>

分页模板需要一个 Page 对象来呈现 上一个 和 下一个 的链接,并且去显示 结果所有页码以及当前的页码。让我们回到 blog/post/list.html 模板,并且在pagination.html 模板包含在底部的 {% content %}快中,如下所示:

{% block content %}
    ....
    {% include "pagination.html" with page=posts %}
{% endblock %}

因为你要传递给模板的Page对象 称为 posts, 所以你要把 分页模板 包含在 文章列表模板中,传递参数以正确呈现它。可以使用此方法在不同模型的分页视图中重用分页模板。

在你的 浏览器中 打开 http://127.0.0.1:8000/ ,你可以在 文章列表的底部看到这个分页,并且应该能够浏览页面。

Snipaste_2020-07-18_16-28-42.jpg

相关文章

网友评论

      本文标题:1.8 添加分页器

      本文链接:https://www.haomeiwen.com/subject/xvdykktx.html