在 Django 中为不同视图共享相同的分页代码

Posted

技术标签:

【中文标题】在 Django 中为不同视图共享相同的分页代码【英文标题】:Share same pagination code for different views in Django 【发布时间】:2016-10-13 05:40:36 【问题描述】:

我正在使用 Django 构建一个简单的博客应用程序。 此应用有一个主模板blog.html,在以下视图之间共享:

博客(网址:/blog/[page number]) 博客主页,显示最近的文章

搜索(网址:/search/<query>/[page number]) 将显示与查询匹配的文章

类别(网址:/category/<category name>/[page number]) 将显示给定类别的文章

每个 this 视图都为模板blog.html 提供一个对象page,每次使用函数Paginator 获得一个不同的对象列表(取决于视图)。

这是我的问题: 模板blog.html 包含一个寻呼机

<ul class="pager">
    % if page.has_previous %
        <li class="previous">
            <a href=" url_previous_page " class="btn btn-primary" >&larr; Older</a>
        </li>
    % endif %

    % if page.has_next %
        <li class="next">
            <a href=" url_next_page " class="btn btn-primary" >Newer &rarr;</a>
        </li>
    % endif %
</ul>

如何优雅地定义所有视图中url_next_pageurl_previous_page 的值?

【问题讨论】:

【参考方案1】:

你不应该真的需要提供这样的下一个和上一个按钮的链接。我建议将您的分页代码更改为如下所示:

<div class="pagination-wrap">
    <span class="pagination-links">
        % if page_obj.has_previous %
            <a href="?page= page_obj.previous_page_number " class="pagination-nav previous"></a>
        % endif %
        <span class="current">
             page_obj.number  of  page_obj.paginator.num_pages 
        </span>
        % if page_obj.has_next %
            <a href="?page= page_obj.next_page_number " class="pagination-nav next"></a>
        % endif %
    </span>
    <div> page_obj.start_index  to  page_obj.end_index  of  page_obj.paginator.count </div>
</div>

在您的视图中,您只需指定要使用paginate_by = 15 分页的对象数。

如果你真的想要,你可以为你的列表视图创建一个 mixin 来使用,它有一个方法可以返回你想要的 url。

【讨论】:

谢谢。问题是该页面未指定为查询参数,而是作为 url 的一部分(例如:/category/mycategory/3)

以上是关于在 Django 中为不同视图共享相同的分页代码的主要内容,如果未能解决你的问题,请参考以下文章

django实现分页功能

django的分页--不全也未实现

013---Django的分页器

Oracle的极大数据量的分页查询问题

django之快速分页

django 中的分页 - 原始查询字符串丢失