hugo-teek is loading...
迁移主库时报错
最后更新于:
问题背景
目前hugo-teek基本没问题了,想着迁移自己主库md文档(原来使用的是teek博客)到hugo-teek,但是中途报错了,具体报错如下:
关于teek目录很多地方报错,我直接给加 下划线 给注释了:

其它地方一个md报错,我也给注释了:

此时没提示md报错,但整体报错了:(不知道如何排查,经过豆包查看解释如下)

豆包解释
根据错误日志,核心问题是 hot-tags-card.html 第25行 调用 index $tagCount . 时,第二个参数(.)是 nil(空值),而 $tagCount 是 map[string]interface{} 类型(键必须是字符串),导致匹配失败。
错误原因分析
这个partial是“热门标签卡片”,逻辑应该是:
- 先构建
$tagCount(标签名 → 文章数量的映射,键是字符串); - 遍历所有标签,用标签名作为键从
$tagCount中取数量。
报错说明:
- 遍历标签时,某个标签是
nil(空标签); - 或错误地将“标签对象”直接作为键(而非标签名字符串)传入
index。
解决方案(步骤清晰,直接操作)
第一步:定位文件
打开路径:D:\hugo-teek-private\hugo-teek-site\themes\hugo-teek\layouts\partials\hot-tags-card.html,找到第25行。
第二步:分析第25行及周边代码
先看第25行前后的代码结构(通常是这样):
1<!-- 示例:常见的错误写法 -->
2{{ $tagCount := .Site.Taxonomies.tags.Counts }} <!-- 构建标签名→数量的map(键是字符串) -->
3{{ range .Site.Taxonomies.tags }} <!-- 遍历标签(这里的“.”是标签对象,不是标签名) -->
4 <span class="tag-count">{{ index $tagCount . }}</span> <!-- 第25行错误:用标签对象当键 -->
5{{ end }}
第三步:针对性修改(2种常见场景)
根据实际代码结构,选对应方案:
场景1:错误地用“标签对象”当键(最常见)
如果第25行是 index $tagCount .,且循环是 {{ range .Site.Taxonomies.tags }},问题是:
循环中的 . 是「标签对象」,而非「标签名字符串」,需要改成标签名(如 .Name 或 .Title,Hugo标签默认用 .Name)。
修改第25行:
1<!-- 错误写法 -->
2{{ index $tagCount . }}
3
4<!-- 正确写法(用标签名作为键) -->
5{{ index $tagCount .Name }}
场景2:循环中存在空标签(nil)
如果循环中混入了空标签(. 是 nil),需要先过滤空值。
修改循环逻辑(在循环时过滤空标签):
1<!-- 错误写法:直接遍历所有标签,可能包含nil -->
2{{ range .Site.Taxonomies.tags }}
3
4<!-- 正确写法:过滤空标签 + 用标签名当键 -->
5{{ range $tag := .Site.Taxonomies.tags }}
6 {{ if $tag }} <!-- 过滤空标签 -->
7 <!-- 第25行修改为:用标签名取数量,同时加默认值避免报错 -->
8 {{ $count := index $tagCount $tag.Name | default 0 }}
9 <span class="tag-count">{{ $count }}</span>
10 {{ end }}
11{{ end }}
场景3:$tagCount 构建异常(兜底方案)
如果 $tagCount 不是“标签名→数量”的map,补充兜底逻辑:
1<!-- 1. 确保 $tagCount 是正确的map(键为标签名字符串) -->
2{{ $tagCount := .Site.Taxonomies.tags.Counts | default dict }}
3
4<!-- 2. 遍历标签时过滤空值,取数量时加默认值 -->
5{{ range $tag := .Site.Taxonomies.tags }}
6 {{ if and $tag $tag.Name }} <!-- 确保标签和标签名都存在 -->
7 {{ $count := index $tagCount $tag.Name | default 0 }} <!-- 不存在时显示0 -->
8 <span class="tag-count">{{ $count }}</span>
9 {{ end }}
10{{ end }}
最终验证
修改后保存文件,重新运行 hugo server 构建站点。如果还有报错,补充以下信息以便进一步定位:
hot-tags-card.html第20-30行的完整代码;$tagCount是如何定义的(搜索$tagCount :=所在行)。
关键总结
- Hugo的
index map 键语法中,键必须是字符串/整数,不能是对象或nil; - 遍历标签时,优先用
.Name取标签名(而非直接用.); - 加
if $tag过滤空值、default 0兜底,能避免大部分nil相关报错。
📡
👤
作者:
余温Gueen
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
余温Gueen Blog!
推荐使用微信支付

推荐使用支付宝
