HUGO短代码中检查变量存在性的实现问题求助
Hugo短代码:允许非闭合形式并检查
text参数 问题
我需要实现一个Hugo短代码,满足以下要求:
- 检查参数
text是否存在(只需存在,无需赋值) - 若
text存在,渲染{{ .Inner | markdownify }} - 携带
text参数时,短代码可以不闭合(例如{{<toc text>}})
但使用以下代码时触发报错:
failed to extract shortcode: shortcode "toc" must be closed or self-closed
原代码:
{{ if isset .Params `text` }} <div class="col"> {{ .Inner | markdownify }} </div> {{ end }}
解决方案
Hugo默认规则:如果短代码模板中使用了.Inner(即引用短代码标签包裹的内容),则必须以闭合形式({{<toc>}}内容{{</toc>}})或自闭合形式({{<toc/>}})使用。要实现你要的非闭合形式,需添加inline声明来修改这一行为。
调整后的短代码
在短代码模板最顶部添加{{/* inline */}}声明,告知Hugo该短代码支持内联(非闭合)形式:
{{/* inline */}} {{ if isset .Params `text` }} <div class="col"> {{ .Inner | markdownify }} </div> {{ end }}
扩展逻辑(可选)
如果希望在非闭合形式下(无.Inner内容时)显示默认文本,可以补充with判断:
{{/* inline */}} {{ if isset .Params `text` }} <div class="col"> {{ with .Inner }} {{ . | markdownify }} {{ else }} 这里是默认显示的文本 {{ end }} </div> {{ end }}
原理说明
{{/* inline */}}是Hugo的短代码特殊声明,添加后会将短代码标记为「内联短代码」,允许以非闭合形式调用。此时即使没有结束标签,Hugo也不会报错,.Inner会被解析为空字符串。
内容的提问来源于stack exchange,提问作者Vladislav Pashora
相关产品推荐
相关产品推荐

