如何在HTML短代码中正确渲染多行Markdown变量?
解决方案
1. 创建处理Markdown的子短代码
在Hugo项目的layouts/shortcodes/目录下新建print_bio.html文件,内容如下:
{{ .Inner | markdownify }}
这个短代码的作用是把传入的内容通过markdownify函数转换成HTML格式。
2. 修改原有人物信息短代码
把你现有的人物短代码(假设文件名是person.html)里的{{ .Get "bio" }}替换成以下调用子短代码的写法,注意要用{{% %}}包裹:
<table> <tr> <td VALIGN=TOP rowspan="2" width="170"><img src="{{ .Get "img"}}" width="150"></td> <td width="600" height="30"><b>{{ .Get "name"}}</b>, <i>{{ .Get "title"}}</i></td> </tr> <tr> <td VALIGN=TOP>{{% print_bio %}}{{ .Get "bio" }}{{% /print_bio %}}</td> </tr> </table> <br>
{{% %}}语法会触发Hugo对短代码内部的内容进行Markdown解析,确保bio里的列表、加粗等格式被正确渲染。
3. 正确调用短代码
现在调用人物短代码时,直接传入带换行的Markdown格式bio内容即可,不需要加反引号:
{{< person img="path/to/avatar.jpg" name="张三" title="高级工程师" bio="Here are some achievements - First thing - List item - and this is **really** important" >}}
关键细节说明
- 选
print_bio.html的原因:Hugo的短代码默认以HTML格式处理,.html后缀的短代码可以直接结合模板逻辑和HTML输出;.md短代码用于纯Markdown内容的渲染,不适合这里在HTML模板中解析Markdown的场景。 markdownify函数:Hugo内置函数,专门负责把Markdown文本转换成对应的HTML标签,完美解决列表、加粗等格式的解析需求。{{% %}}vs{{< >}}:{{% %}}会解析短代码内部的Markdown内容,{{< >}}仅渲染短代码的HTML输出,不处理内部Markdown。所以调用print_bio必须用{{% %}}才能让Markdown解析生效。
内容的提问来源于stack exchange,提问作者Scoubi
相关产品推荐
相关产品推荐

