Hugo中如何在同一页面使用多个.Paginate range?
Hugo同一页面使用多个Range加载不同版块的解决方案
问题原因
你遇到的第一段卡片消失的问题,核心是Hugo的.Paginate是全局状态方法——第二次调用.Paginate时,会完全覆盖第一次的分页上下文,导致第一段的分页数据被清空,对应的卡片自然无法渲染。
解决方案
根据是否需要分页,有两种处理方式:
1. 不需要分页(首页展示全量内容)
直接跳过Paginate,用where筛选对应版块的页面后遍历即可:
{{ range where site.RegularPages "Section" "research" }} {{ partial "research-card" .}} {{ end }} {{ range where site.RegularPages "Section" "services" }} {{ partial "services-card" .}} {{ end }}
2. 需要对每个版块单独分页(支持翻页)
使用Hugo的命名分页器(需Hugo 0.68.0及以上版本),给每个分页器分配唯一变量,避免全局覆盖:
{{ $researchPaginator := .Paginate (where site.RegularPages "Section" "research") }} {{ range $researchPaginator.Pages }} {{ partial "research-card" .}} {{ end }} {{ $servicesPaginator := .Paginate (where site.RegularPages "Section" "services") }} {{ range $servicesPaginator.Pages }} {{ partial "services-card" .}} {{ end }}
单独页面nil变量错误的解决
如果为版块单独建页面时出现nil错误,大概率是模板中未判断数据是否存在。可以添加空值检查避免报错:
{{ $researchPages := where site.RegularPages "Section" "research" }} {{ if $researchPages }} {{ range $researchPages }} {{ partial "research-card" .}} {{ end }} {{ else }} <p>暂无研究内容</p> {{ end }}
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

