我正在使用Django构建一个简单的博客应用程序。此应用有一个主模板blog.html
在以下视图之间共享:
-
博客 (网址:
/blog/[page number]
)
博客的主页,显示最后的文章 -
搜索 (网址:
/search/<query>/[page number]
)
将显示与查询匹配的文章 -
类别 (网址:
/category/<category name>/[page number]
)
将显示给定类别的文章
每个 a 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" >← Older</a>
</li>
{% endif %}
{% if page.has_next %}
<li class="next">
<a href="{{ url_next_page }}" class="btn btn-primary" >Newer →</a>
</li>
{% endif %}
</ul>
如何以优雅的方式定义所有视图中url_next_page
和url_previous_page
的值?
您实际上不需要为下一个和上一个按钮提供链接。我建议将您的分页代码更改为如下所示:
<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的方法。