Hugo 0.100.1无法渲染data目录JSON数据模板问题
问题根因
Hugo 默认不会解析普通 Markdown 内容文件中写入的 Go 模板语法,该默认规则是Hugo的安全设计,避免内容文件中混入恶意模板代码被执行。直接将range遍历逻辑写在content/posts/staff.md正文里时,Hugo 会把这段代码识别为普通文本原样输出,不会执行遍历渲染逻辑。
可行解决方案
- 方案1:通过短代码(Shortcode)实现渲染(推荐)
在项目layouts/shortcodes/目录下新建短代码模板文件,比如命名为staff-list.html,将数据遍历逻辑写入该文件:
回到{{ range .Site.Data.staff }} <h2>{{ .name }}</h2> <p>{{ .email }}</p> {{ end }}content/posts/staff.md文件,删除原来直接写的模板代码,替换为短代码调用语句{{</* staff-list */>}}即可,Hugo 构建时会自动执行短代码内的逻辑完成数据渲染。 - 方案2:为页面配置专属渲染模板
在layouts/posts/目录下新建与页面对应的模板文件,比如对应staff.md的模板为staff.html,将遍历渲染逻辑写入模板文件,Markdown 文件仅保留正文内容即可,Hugo 构建时会自动匹配对应模板完成数据渲染。 - 方案3:开启单页模板渲染权限(不推荐)
如果需要直接在 Markdown 文件内写模板语法,可以在对应页面的头部配置(Front Matter)中添加如下配置,强制 Hugo 渲染文件内的模板语句:
该方案会造成内容和渲染逻辑强耦合,提升后续维护成本,非特殊场景不建议使用。build: render: always
内容的提问来源于stack exchange,提问作者VojtaN
相关产品推荐
相关产品推荐

