You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:47:28