Hugo模板无法访问Markdown自定义元数据问题求助
这个问题我之前折腾Hugo的时候也碰到过,属于访问自定义Front Matter变量的典型误区~
问题根源
Hugo里的变量分两类:一类是内置顶级变量(比如.Title、.Content),这些是框架预设的,可以直接通过页面对象访问;另一类是你自己在Markdown头部定义的自定义字段(比如author、position),这些字段会被自动收纳到页面的.Params映射(map)里,不能直接用.Author或.Position访问。你之前看到的{ map[]},其实是Hugo找不到对应的顶级变量时返回的空map对象。
解决方案
只需要把模板里的自定义字段访问路径改成.Params.xxx就可以了,修改后的模板代码如下:
{{ range where .Data.Pages "Type" "type"}} <section> <div> <div> {{ .Title }}<br> {{ .Content }} </div> <div> {{ .Params.Author }}<br> {{ .Params.Position }} </div> </div> </section> {{ end }}
额外优化建议
如果担心某些文章可能没填author或position字段,导致页面显示空白,可以用with语句或者default函数做容错处理:
- 用
with:只会在字段存在时渲染内容{{ with .Params.Author }}作者:{{ . }}{{ end }} - 用
default:字段不存在时显示默认值{{ .Params.Position | default "未知职位" }}
内容的提问来源于stack exchange,提问作者Osleff
相关产品推荐
相关产品推荐

