Django分页:用讲座标题而非数字实现侧边栏导航
问题分析与解决方案
你的问题出在嵌套循环逻辑错误,且未正确获取对应页码的讲座对象:
- 外层遍历页码
page_range时,内层循环的lecture_single是当前请求页的讲座列表(每页仅1个,所以每次内层只循环1次),导致每个页码都输出当前页的讲座标题,最终所有链接显示同一个标题。 - 代码里还误用了未定义的变量
lecture,即便修正为lecture_x,核心逻辑错误依然存在。
正确实现代码
你需要通过分页器的get_page()方法,获取对应页码的页面对象,从而拿到该页的讲座标题:
<ul> {% for pg in lecture_single.paginator.page_range %} {% with target_page=lecture_single.paginator.get_page(pg) %} <!-- 因每页仅1个讲座,直接取第一个元素 --> <li> <a href="?page={{ pg }}" class="btn">{{ target_page.0.title }}</a> </li> {% endwith %} {% endfor %} </ul>
如果未来可能调整每页显示数量,可使用更严谨的写法:
<ul> {% for pg in lecture_single.paginator.page_range %} {% with target_page=lecture_single.paginator.get_page(pg) %} {% for lecture in target_page %} <li> <a href="?page={{ pg }}" class="btn">{{ lecture.title }}</a> </li> {% endfor %} {% endwith %} {% endfor %} </ul>
逻辑说明
lecture_single.paginator.get_page(pg)会返回指定页码pg对应的页面对象,该对象包含了该页的所有讲座数据。通过这个方式,就能为每个页码链接匹配到对应的讲座标题,而非重复当前页内容。
内容的提问来源于stack exchange,提问作者Jerome Kambafwile
相关产品推荐
相关产品推荐

