HUGO

  • 新闻
  • 文档
  • 主题
  • 社区
  • GitHub
gohugoio Star
  • 关于
    • 本节内容
    • 简介
    • 特性
    • 隐私
    • 安全
    • 许可
  • 安装
    • 本节内容
    • macOS
    • Linux
    • Windows
    • BSD
  • 入门
    • 本节内容
    • 快速入门
    • 基本用法
    • 目录结构
    • 配置
    • 配置标记
    • 配置构建
    • 术语表
    • 外部学习资源
  • 快速参考
    • 本节内容
    • 表情符号
    • 函数
    • 方法
    • 页面集合
  • 内容管理
    • 本节内容
    • 组织
    • 页面包
    • 内容格式
    • Front matter
    • 构建选项
    • 页面资源
    • 图像处理
    • 简码
    • 相关内容
    • 章节
    • 内容类型
    • 原型
    • 分类法
    • 摘要
    • 链接和交叉引用
    • URL 管理
    • 菜单
    • 评论
    • 多语言
    • Markdown 属性
    • 语法高亮
    • 图表
    • 数学
    • 数据源
    • 内容适配器
  • 模板
    • 本节内容
    • 简介
    • 模板类型
    • 查找顺序
    • 基础模板
    • 主页模板
    • 单页模板
    • 章节模板
    • 分类模板
    • 术语模板
    • 部分模板
    • 内容视图模板
    • 简码模板
    • 站点地图模板
    • RSS 模板
    • 404 模板
    • robots.txt 模板
    • 菜单
    • 分页
    • 嵌入式模板
    • 自定义输出格式
  • 函数
    • 本节内容
    • cast
    • collections
    • compare
    • crypto
    • css
    • data
    • debug
    • diagrams
    • encoding
    • fmt
    • global
    • go template
    • hash
    • hugo
    • images
    • inflect
    • js
    • lang
    • math
    • openapi3
    • os
    • partials
    • path
    • reflect
    • resources
    • safe
    • strings
    • templates
    • time
    • transform
    • urls
  • 方法
    • 本节内容
    • Duration
    • Menu
    • 菜单项
    • 页面
    • 分页器
    • 页面
    • 资源
    • 简码
    • 站点
    • 分类
    • 时间
  • 渲染钩子
    • 本节内容
    • 简介
    • 引用
    • 代码块
    • 标题
    • 图像
    • 链接
    • 透传
    • 表格
  • 简码
    • 本节内容
    • 评论
    • 详情
    • 图
    • Gist
    • 高亮
    • Instagram
    • 参数
    • 二维码
    • Ref
    • Relref
    • Vimeo
    • X
    • YouTube
  • Hugo 模块
    • 本节内容
    • 配置 Hugo 模块
    • 使用 Hugo 模块
    • 主题组件
  • Hugo 管道
    • 本节内容
    • 简介
    • 将 Sass 转译为 CSS
    • PostCSS
    • 后处理
    • JavaScript 构建
    • 资源压缩
    • 连接资源
    • 指纹识别和 SRI 哈希
    • 来自字符串的资源
    • 来自模板的资源
  • CLI
  • 故障排除
    • 本节内容
    • 审计
    • 日志
    • 检查
    • 弃用
    • 性能
    • 常见问题
  • 开发者工具
    • 本节内容
    • 编辑器插件
    • 前端
    • 搜索
    • 迁移
    • 其他项目
  • 托管和部署
    • 本节内容
    • Hugo Deploy
    • 使用 Rclone 部署
    • 使用 Rsync 部署
    • 在 21YunBox 上托管
    • 在 AWS Amplify 上托管
    • 在 Azure Static Web Apps 上托管
    • 在 Cloudflare Pages 上托管
    • 在 Firebase 上托管
    • 在 GitHub Pages 上托管
    • 在 GitLab Pages 上托管
    • 在 KeyCDN 上托管
    • 在 Netlify 上托管
    • 在 Render 上托管
  • 贡献
    • 本节内容
    • 开发
    • 文档
    • 主题
  • 维护
模板

分页

将列表页面拆分为两个或多个子集。

在列表页面上显示大量的页面集合并不方便用户

  • 一个庞大的列表可能会让人望而生畏,难以浏览。用户可能会迷失在大量的信息中。
  • 大型页面需要更长时间才能加载,这会让用户感到沮丧,并导致他们放弃该网站。
  • 在没有任何过滤或组织的情况下,查找特定项目会变成一项乏味的滚动练习。

通过对 home、section、taxonomy 和 term 页面进行分页来提高可用性。

与分页相关的最常见的模板错误是为一个给定的列表页面多次调用分页。请参阅下面的 缓存 部分。

术语

分页
将 列表页面 拆分为两个或多个子集。
分页
分页列表页面的过程。
分页器
在分页期间创建,分页器包含列表页面的子集以及指向其他分页器的导航链接。
分页器
分页器的集合。

配置

控制站点配置中的分页行为。以下是默认设置

hugo。
     
pagination:
  disableAliases: false
  pagerSize: 10
  path: page
[pagination]
  disableAliases = false
  pagerSize = 10
  path = 'page'
{
   "pagination": {
      "disableAliases": false,
      "pagerSize": 10,
      "path": "page"
   }
}
disableAliases
(bool)是否禁用第一个分页器的别名生成。默认为 false。
pagerSize
(int)每个分页器的页面数。默认为 10。
path
(string)每个分页器 URL 的段,指示目标页面是分页器。默认为 page。

对于多语言站点,您可以为每种语言定义分页行为

hugo。
     
languages:
  de:
    contentDir: content/de
    languageCode: de-DE
    languageDirection: ltr
    languageName: Deutsch
    pagination:
      disableAliases: true
      pagerSize: 20
      path: blatt
    weight: 2
  en:
    contentDir: content/en
    languageCode: en-US
    languageDirection: ltr
    languageName: English
    pagination:
      disableAliases: true
      pagerSize: 10
      path: page
    weight: 1
[languages]
  [languages.de]
    contentDir = 'content/de'
    languageCode = 'de-DE'
    languageDirection = 'ltr'
    languageName = 'Deutsch'
    weight = 2
    [languages.de.pagination]
      disableAliases = true
      pagerSize = 20
      path = 'blatt'
  [languages.en]
    contentDir = 'content/en'
    languageCode = 'en-US'
    languageDirection = 'ltr'
    languageName = 'English'
    weight = 1
    [languages.en.pagination]
      disableAliases = true
      pagerSize = 10
      path = 'page'
{
   "languages": {
      "de": {
         "contentDir": "content/de",
         "languageCode": "de-DE",
         "languageDirection": "ltr",
         "languageName": "Deutsch",
         "pagination": {
            "disableAliases": true,
            "pagerSize": 20,
            "path": "blatt"
         },
         "weight": 2
      },
      "en": {
         "contentDir": "content/en",
         "languageCode": "en-US",
         "languageDirection": "ltr",
         "languageName": "English",
         "pagination": {
            "disableAliases": true,
            "pagerSize": 10,
            "path": "page"
         },
         "weight": 1
      }
   }
}

方法

要对 home、section、taxonomy 或 term 页面进行分页,请在相应模板中的 Page 对象上调用以下任一方法

  • Paginate
  • Paginator

Paginate 方法更加灵活,允许您

  • 分页任何页面集合
  • 筛选、排序和分组页面集合
  • 覆盖站点配置中定义的每个分页器的页面数

相比之下,Paginator 方法会对传递到模板中的页面集合进行分页,并且您无法覆盖每个分页器的页面数。

示例

要使用 Paginate 方法对列表页面进行分页

{{ $pages := where site.RegularPages "Type" "posts" }}
{{ $paginator := .Paginate $pages.ByTitle 7 }}

{{ range $paginator.Pages }}
  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}

{{ template "_internal/pagination.html" . }}

在上面的示例中,我们

  1. 构建页面集合
  2. 按标题排序页面集合
  3. 对页面集合进行分页,每个分页器有 7 个页面
  4. 遍历分页的页面集合,呈现指向每个页面的链接
  5. 调用嵌入式分页模板以创建分页器之间的导航链接

要使用 Paginator 方法对列表页面进行分页

{{ range .Paginator.Pages }}
  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}

{{ template "_internal/pagination.html" . }}

在上面的示例中,我们

  1. 对传递到模板中的页面集合进行分页,每个分页器的页面数为默认值
  2. 遍历分页的页面集合,呈现指向每个页面的链接
  3. 调用嵌入式分页模板以创建分页器之间的导航链接

缓存

与分页相关的最常见的模板错误是为一个给定的列表页面多次调用分页。

无论采用哪种分页方法,初始调用都会被缓存,并且无法更改。如果您为一个给定的列表页面多次调用分页,则后续调用将使用缓存的结果。这意味着后续调用将不会按编写的方式执行。

在有条件地进行分页时,请勿使用 compare.Conditional 函数,因为它会急于评估参数。请改用 if-else 构造。

分组

你可以将分页与任何分组方法结合使用。例如:

{{ $pages := where site.RegularPages "Type" "posts" }}
{{ $paginator := .Paginate ($pages.GroupByDate "Jan 2006") }}

{{ range $paginator.PageGroups }}
  <h2>{{ .Key }}</h2>
  {{ range .Pages }}
    <h3><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h3>
  {{ end }}
{{ end }}

{{ template "_internal/pagination.html" . }}

导航

如上例所示,在分页器之间添加导航最简单的方法是使用 Hugo 内嵌的分页模板。

{{ template "_internal/pagination.html" . }}

内嵌分页模板有两种格式:default 和 terse。上面的示例等同于:

{{ template "_internal/pagination.html" (dict "page" . "format" "default") }}

terse 格式的控件和页面槽位更少,在样式化为水平列表时占用空间更小。要使用 terse 格式:

{{ template "_internal/pagination.html" (dict "page" . "format" "terse") }}

要覆盖 Hugo 的内嵌分页模板,请将源代码复制到 layouts/partials 目录中同名的文件中,然后使用partial 函数从模板中调用它。

{{ partial "pagination.html" . }}

使用任何 Pager 方法创建自定义导航组件。

首先
返回分页器集合中的第一个分页器。
HasNext
报告当前分页器之后是否还有分页器。
HasPrev
报告当前分页器之前是否还有分页器。
Last
返回分页器集合中的最后一个分页器。
Next
返回分页器集合中的下一个分页器。
NumberOfElements
返回当前分页器中的页面数量。
PageGroups
返回当前分页器中的页面组。
PageNumber
返回当前分页器在分页器集合中的编号。
Pagers
返回分页器集合。
PagerSize
返回每个分页器的页面数。
页面
返回当前分页器中的页面。
PageSize
返回每个分页器的页面数。
Prev
返回分页器集合中的上一个分页器。
TotalNumberOfElements
返回分页器集合中的页面总数。
TotalPages
返回分页器集合中的分页器总数。
URL
返回当前分页器相对于站点根目录的 URL。

结构

下面的示例描述了对列表页面进行分页时发布的站点结构。

具有以下内容:

content/
├── posts/
│   ├── _index.md
│   ├── post-1.md
│   ├── post-2.md
│   ├── post-3.md
│   └── post-4.md
└── _index.md

以及以下站点配置:

hugo。
     
pagination:
  disableAliases: false
  pagerSize: 2
  path: page
[pagination]
  disableAliases = false
  pagerSize = 2
  path = 'page'
{
   "pagination": {
      "disableAliases": false,
      "pagerSize": 2,
      "path": "page"
   }
}

以及以下部分模板:

{{ range (.Paginate .Pages).Pages }}
  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}

{{ template "_internal/pagination.html" . }}

发布的站点具有以下结构:

public/
├── posts/
│   ├── page/
│   │   ├── 1/
│   │   │   └── index.html  <-- alias to public/posts/index.html
│   │   └── 2/
│   │       └── index.html
│   ├── post-1/
│   │   └── index.html
│   ├── post-2/
│   │   └── index.html
│   ├── post-3/
│   │   └── index.html
│   ├── post-4/
│   │   └── index.html
│   └── index.html
└── index.html

要禁用第一个分页器的别名生成,请更改您的站点配置:

hugo。
     
pagination:
  disableAliases: true
  pagerSize: 2
  path: page
[pagination]
  disableAliases = true
  pagerSize = 2
  path = 'page'
{
   "pagination": {
      "disableAliases": true,
      "pagerSize": 2,
      "path": "page"
   }
}

现在,发布的站点将具有以下结构:

public/
├── posts/
│   ├── page/
│   │   └── 2/
│   │       └── index.html
│   ├── post-1/
│   │   └── index.html
│   ├── post-2/
│   │   └── index.html
│   ├── post-3/
│   │   └── index.html
│   ├── post-4/
│   │   └── index.html
│   └── index.html
└── index.html

另请参阅

  • 颜色
  • Exif
  • 文件
  • 简介
  • AlternativeOutputFormats

本页内容

  • 术语
  • 配置
  • 方法
  • 示例
  • 缓存
  • 分组
  • 导航
  • 结构
最后更新时间:2025 年 1 月 16 日:将目录名、文件名和文件路径格式化为代码 (8051ff818)
改进此页面
由 Hugo 作者 提供
Hugo Logo
  • 提交问题
  • 获取帮助
  • @GoHugoIO
  • @spf13
  • @bepsays

Netlify badge

 

Hugo 赞助商

您的公司?
 

Hugo 徽标版权归 Steve Francia 所有,2013-2025 年。

Hugo Gopher 基于 Renée French 的原创作品。

  • 新闻
  • 文档
  • 主题
  • 社区
  • GitHub
  • 关于
  • 安装
  • 入门
  • 快速参考
  • 内容管理
  • 模板
  • 函数
  • 方法
  • 渲染钩子
  • 简码
  • Hugo 模块
  • Hugo 管道
  • CLI
  • 故障排除
  • 开发者工具
  • 托管和部署
  • 贡献
  • 维护