Django ListView搭配Paginator分页显示文章标题而非页码该怎么修复?
问题原因
你遇到的问题由两个代码错误导致:
- 分页循环对象错误:你遍历的
all_posts是当前页的文章列表,每个元素都是Post模型实例,渲染时会调用模型的__str__方法输出你设置的返回值(也就是文章标题),自然不会显示页码 - 下一页跳转逻辑错误:「Next」按钮的链接参数填成了
previous_page_number,点击后会跳转到前一页而非下一页
Django的ListView开启paginate_by参数后,会自动向模板注入两个分页专用的上下文变量:
paginator:全局分页器实例,包含总页数、页码范围等全局属性page_obj:当前分页实例,包含当前页码、是否存在上下页等当前页属性
修复方案
直接替换模板中分页部分的代码即可,修复后代码如下:
</div> <nav aria-label="Page navigation example"> <ul class="pagination d-flex justify-content-center mt-1"> {% if page_obj.has_previous %} <li class="page-item "> <a class="page-link" href="?page={{ page_obj.previous_page_number }}">Previous</a> </li> {% endif %} {% for page in paginator.page_range %} <li class="page-item {% if page == page_obj.number %}active{% endif %}"> <a class="page-link" href="?page={{ page }}"><span>{{page}}</span></a> </li> {% endfor %} {% if page_obj.has_next %} <li class="page-item"> <a class="page-link" href="?page={{ page_obj.next_page_number }}">Next</a> </li> {% endif %} </ul> </nav> </div> <!-- Pagination-->
代码额外增加了当前页码高亮的逻辑,你可以根据需求调整样式。
内容的提问来源于stack exchange,提问作者El Houssain Sabri
相关产品推荐
相关产品推荐

