Hugo调用Section页面报错参数不匹配,原有可用代码失效如何解决?
问题原因
- 第一个报错是因为
ByTitle是Hugo页面集合的内置排序方法,本身不接受任何参数,你将筛选section的参数错误传给了ByTitle,触发参数数量不匹配的错误。 - 第二个报错是因为
where筛选函数要求至少传入3个参数:待筛选的页面集合、筛选字段名、字段匹配值,你仅传入了页面集合1个参数,不符合函数要求。 - 同一段代码在
header.html中可以正常运行,大概率是你在header中写的代码顺序正确:先调用where筛选出products分区的页面,再调用ByTitle排序,而非把筛选参数传给排序方法。
修复方案
调整代码逻辑顺序:先筛选products分区的页面,再对筛选结果按标题排序,渲染时直接遍历已经筛选+排序好的集合即可,不需要二次调用where。
修正后的完整代码片段如下:
{{define "main"}} {{/* 先筛选products分区页面,再按标题排序 */}} {{ $products := (where .Site.RegularPages "Section" "products").ByTitle }} {{with .Params.banner}} [...] <div class="dropdown-menu"> {{/* 直接遍历处理好的集合,不需要再加where */}} {{ range $products }} <a class="dropdown-item " href="{{ .Permalink }}">{{ .Title }}</a> {{ end }} [...]
内容的提问来源于stack exchange,提问作者gwizzo
相关产品推荐
相关产品推荐

