HUgo提供的分页机制在与where 函数以及函数中类似SQL的操作符: first, last, 和 after 结合使用时, Hugo的真正强大力量会熠熠生辉发出耀眼光芒:)。 同时也可以按您习惯的HUgo方式对内容排序.

配置分页

分页可以在站点配置文件中配置。

Paginate
default = 10默认值, 设置以后可以在模板内重载这个值.
PaginatePath
分页路径 默认值 = page 允许您设置分页页面的不同路径.

设置Paginate为正数会将主页、区块和分类页面分成包含设置的数值大小的页面块。但是请注意,为区块页、分类标签页和主页的分页页面的生成是lazy懒加载的–页面不会被创建如果没有被 .Paginator (见下面说明)引用.

PaginatePath用于在页面分页器中定制URL(默认设置生成的URL形如 /page/1/)

展示分页页面列表

有两种配置和使用.Paginator的方式:

  1. 最简单的方式是在模板中调用 .Paginator.Pages, 这里面包含 那个页面 所属的页面.
  2. 使用可用的模板函数和排序选项选择另外的页面集合, 然后传递选择的slice给.Paginate使用. 比如.
  • {{ range (.Paginate ( first 50 .Pages.ByTitle )).Pages }} 或者
  • {{ range (.Paginate .RegularPagesRecursive).Pages }}.

对于指定的 Page, 它是上面两种方式之一. .Paginator是静态的、一经创建无法改变.

如果在同一页面调用.Paginator or .Paginate多次, 必须保证所有的调用是相同的. 在生成页面时一旦调用.Paginator 或者 .Paginate, 结果会被缓存, 任何后续的相似调用会重用缓存结果. 这意味着任何不与第一个调用匹配的后续调用不会得到想要的结果.

(谨记函数参数会提前评估,所以类似$paginator := cond x .Paginator (.Paginate .RegularPagesRecursive)这样的调用是您不应该使用的例子. 应该使用if/else来保证仅仅调用一次评估.

全局页面分页数值设定 (Paginate) 可以被提供的最后一个正数参数重载. 下面的例子会生成每个页面五个条目:

  • {{ range (.Paginator 5).Pages }}
  • {{ $paginator := .Paginate (where .Pages "Type" "posts") 5 }}

也可以将GroupBy函数与分页结合使用:

1
{{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups  }}

构建分页导航

.Paginator包含构建分页界面的足够信息.

最简单的方式是在您页面内包含hugo内置的模板(Bootstrap兼容的模式):

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

下面例子展示了如何在使用前创建.Paginator:

1
2
3
4
5
{{ $paginator := .Paginate (where .Pages "Type" "posts") }}
{{ template "_internal/pagination.html" . }}
{{ range $paginator.Pages }}
   {{ .Title }}
{{ end }}

如果没有where 过滤, 上面例子更简单:

1
2
3
4
{{ template "_internal/pagination.html" . }}
{{ range .Paginator.Pages }}
   {{ .Title }}
{{ end }}

如果想构建定制的分页导航, 您可以使用 .Paginator对象来达成,.Paginator对象包含下面的属性:

PageNumber
当前页在页面序列中的数值
URL
当前页的相对URL
Pages
分页器所管理的页面
NumberOfElements
当前页的元素数量
HasPrev
当前页是否有前一页
Prev
当前页的前一页
HasNext
当前页是否具有下一页
Next
当前页的下一页
First
分页的第一页
Last
分页的最后一页
Pagers
分页的list用来构建分页的菜单
PageSize
每页的元素数量
TotalPages
分页器中所有页数量
TotalNumberOfElements
分页器中所有页上的元素数目

补充信息

所有分页器的页面构建形式如下(BLANK意味着没有值):

1
2
3
4
[SECTION/TAXONOMY/BLANK]/index.html
[SECTION/TAXONOMY/BLANK]/page/1/index.html => redirect to  [SECTION/TAXONOMY/BLANK]/index.html
[SECTION/TAXONOMY/BLANK]/page/2/index.html
....