You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现带分页锚点的书籍索引?解决迭代错误

解决迭代错误并实现章节跳转至对应分页锚点的功能

错误原因分析

你遇到的'int' object is not iterable错误,是因为paginator.num_pages返回的是总页数的整数(比如总共有3页就返回3),而不是可迭代的页面对象集合,直接用for page in chapters_pages遍历整数必然报错。

修正方案

1. 视图层代码修改

核心思路是先计算所有章节对应的页码,再将最后3个章节及其页码传入模板:

# 获取所有章节数据(避免变量名冲突,不要用chapters覆盖原数据)
all_chapters = ... # 替换为你的全量章节数据源
per_page = 2  # 每页展示的章节数量,和Paginator设置保持一致

# 初始化分页器
paginator = Paginator(all_chapters, per_page)
page = self.request.GET.get("page", 1)

# 处理分页逻辑
try:
    paginated_chapters = paginator.page(page)
except PageNotAnInteger:
    paginated_chapters = paginator.page(1)
except EmptyPage:
    paginated_chapters = paginator.page(paginator.num_pages)

# 计算每个章节对应的页码
chapter_page_map = {}
for idx, chapter in enumerate(all_chapters):
    # 索引从0开始,页码 = (索引 // 每页数量) + 1
    page_num = (idx // per_page) + 1
    chapter_page_map[chapter] = page_num

# 准备最后3个章节的结构化数据(包含章节名称和对应页码)
last_three_chapters = []
for chapter in all_chapters[-3:]:
    last_three_chapters.append({
        "name": chapter,
        "page": chapter_page_map[chapter]
    })

# 将数据传入模板上下文
context.update({
    "book": last_three_chapters,
    "paginated_chapters": paginated_chapters  # 当前分页的章节,用于页面展示
})

2. 模板代码修改

使用传入的结构化数据生成带分页参数和锚点的链接:

<ul>
  {% for item in book %}
    <li>
        <a href="?page={{ item.page }}#{{ item.name }}">{{ item.name }}</a>
    </li>
  {% endfor %}
</ul>

3. 页面锚点匹配

确保分页页面中每个章节的DOM元素设置了对应的id,比如:

<!-- 分页页面中的章节展示部分示例 -->
{% for chapter in paginated_chapters %}
  <div id="{{ chapter }}">
    <h3>{{ chapter }}</h3>
    <!-- 章节内容 -->
  </div>
{% endfor %}

这样点击章节链接时,会先跳转到对应分页,再自动滚动到该章节的位置。

内容的提问来源于stack exchange,提问作者user17841947

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:05:28