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

Hugo嵌套shortcode调用markdownify时内容被<pre>包裹渲染异常

问题根因

渲染异常由两个问题共同导致:

  • 用{{< >}}格式调用shortcode时,Hugo默认不会自动剥离内容的前置缩进。你写调用代码时,子shortcode内的列表项前面带了多层缩进,行首空格数达到Markdown代码块的触发阈值(默认4个空格),直接被解析器识别为代码块,包裹进<pre><code>标签输出。
  • 父级shortcode直接输出.Inner未做安全渲染处理,嵌套场景下内层shortcode的Markdown解析上下文异常,导致内容解析规则失效。
修复方案

1. 修改父级shortcode代码

将直接输出.Inner的逻辑替换为安全渲染,高版本Hugo可直接调用内置方法剥离公共缩进,修改后代码:

<section class="row td-box td-box--height-auto usage">
    <div class="col">
        <h2>{{ with .Get "heading" }}{{.}}{{end}}</h2>
        {{/* Hugo 版本 >= 0.101.0 用下面这行 */}}
        {{ .Inner.Deindent | safeHTML }}
        {{/* 版本低于0.101.0 就用这行,替换上面的Deindent逻辑 */}}
        {{/* .Inner | safeHTML */}}
    </div>
</section>

2. 修改子级shortcode代码

渲染内部Markdown前先剥离内容首尾的换行、空格,避免多余空白干扰解析,修改后代码:

<div class='col-lg-6 mb-5 mb-lg-0 {{ with .Get "class" }}{{.}}{{end}}'>
    <h3>{{ with .Get "class" }}{{.}}{{end}}</h3>
    {{ .Inner | trim "\n\r " | markdownify | safeHTML }}
</div>

3. 低版本Hugo兼容调整

如果使用0.101.0以下版本、不支持.Deindent方法,写shortcode调用时不要给内层内容加多余缩进,参考写法:

{{< usagepane heading="Usage" >}}
{{< usage class="do" >}}
* test 1
{{< /usage >}}
{{< usage class="dont" >}}
* test 2
{{< /usage >}}
{{< /usagepane >}}
渲染效果验证

修改后内层Markdown列表会被正确解析为<ul><li>结构,不会再被转成代码块,预期输出HTML:

<section class="row td-box td-box--height-auto usage">
    <div class="col">
        <h2>Usage</h2>
        <div class="col-lg-6 mb-5 mb-lg-0 do">
            <h3>do</h3>
            <ul>
                <li>test 1</li>
            </ul>
        </div>
        <div class="col-lg-6 mb-5 mb-lg-0 dont">
            <h3>dont</h3>
            <ul>
                <li>test 2</li>
            </ul>
        </div>
    </div>
</section>

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:06:27