【问题标题】:Share same pagination code for different views in Django在 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 的值?

【问题讨论】:

    标签: django pagination django-templates django-views


    【解决方案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)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2023-02-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多