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

时间:2016-06-12 20:52:04

标签: django pagination django-templates django-views

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

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

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

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

每个视图都为模板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 个答案:

答案 0 :(得分:0)

您不应该真的需要提供下一个和上一个按钮的链接。我建议你改变你的分页代码:

<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的方法。