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

Hugo v0.132.1遍历栏目页面报错:无法迭代nil值求助

解决Hugo Partial模板中遍历栏目页面时的nil迭代错误

问题描述

使用Hugo v0.132.1,尝试在layouts/partials/elements/slider-element.html中遍历content/references/下的页面时,出现错误:

execute of template failed at <where .Site.RegularPages "Section" "references">: error calling where: can’t iterate over <nil>

项目结构:

content/
|-- references/
|   |-- ref1.md
|   |-- ref2.md
|   |-- ref3.md
layouts/
|-- partials/
|   |-- elements/
|       |-- slider-element.html

Partial核心代码片段:

{{ $references := where .Site.RegularPages "Section" "references" }}
<!-- 后续滑块渲染逻辑 -->

核心原因

错误提示.Site.RegularPages为<nil>,通常由两种情况导致:

  1. Partial调用时未传递有效上下文,模板无法获取站点实例.Site
  2. 使用.Site上下文不够稳定,在部分场景下无法正确读取站点数据

解决方案

方案1:使用全局site()函数替代.Site

Hugo 0.112+版本支持全局site()函数,无论Partial接收的上下文是什么,都能稳定获取站点实例。修改Partial第一行代码:

{{ $references := where site.RegularPages "Section" "references" }}

方案2:直接获取栏目页面集合

更精准的方式是直接定位references栏目,获取其下属页面列表,避免where筛选可能出现的问题:

{{ $refSection := site.GetPage "section" "references" }}
{{ $references := $refSection.Pages }}

{{ if gt (len $references) 0 }}
<!-- 原有滑块渲染逻辑 -->
{{ else }}
  <p>No references.</p>
{{ end }}

方案3:确保Partial调用时传递正确上下文

检查调用该Partial的模板(如首页、栏目页),确保传递包含站点上下文的参数:

<!-- 在调用模板中传递当前页面上下文 -->
{{ partial "elements/slider-element.html" . }}

也可直接传递站点上下文:

{{ partial "elements/slider-element.html" site }}

额外检查项

  1. 确认content/references/下的所有.md文件都包含合法Front Matter(至少是空的---分隔符),否则Hugo不会将其识别为有效页面
  2. 检查站点配置文件(如config.toml),确保未将references栏目排除在构建范围外
  3. 若页面设置了draft: true,构建时需添加--buildDrafts参数才能包含这些页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:23:16