内部
Syntax
SHORTCODE.Inner
Returns
template.HTML
这个内容:
content/services.md
{{< card title="产品设计" >}}
我们设计世界上最好的小部件。
{{< /card >}}
使用这个短代码:
layouts/shortcodes/card.html
<div class="card">
{{ with .Get "title" }}
<div class="card-title">{{ . }}</div>
{{ end }}
<div class="card-content">
{{ trim .Inner "\r\n" }}
</div>
</div>
渲染为:
<div class="card">
<div class="card-title">产品设计</div>
<div class="card-content">
我们设计世界上最好的小部件。
</div>
</div>
使用RenderString方法
让我们修改上面的示例,通过Page
对象上的RenderString
方法传递Inner
返回的值:
layouts/shortcodes/card.html
<div class="card">
{{ with .Get "title" }}
<div class="card-title">{{ . }}</div>
{{ end }}
<div class="card-content">
{{ trim .Inner "\r\n" | .Page.RenderString }}
</div>
</div>
Hugo将其渲染为:
<div class="card">
<div class="card-title">产品设计</div>
<div class="card-content">
我们生产世界上最好的小部件。
</div>
</div>
您可以使用markdownify
函数而不是RenderString
方法,但后者更加灵活。查看详情.
使用替代符号
不使用{{< >}}
的形式调用短代码,而使用{{% %}}
的形式:
content/services.md
{{% card title="产品设计" %}}
我们设计世界上最好的小部件。
{{% /card %}}
当您使用{{% %}}
符号时,Hugo将整个短代码渲染为markdown,需要进行以下更改。
首先,配置渲染器以允许markdown中的原始HTML:
hugo.
markup:
goldmark:
renderer:
unsafe: true
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
{
"markup": {
"goldmark": {
"renderer": {
"unsafe": true
}
}
}
}
如果您控制内容,这个配置是安全的。请了解更多关于Hugo的安全模型。
其次,因为我们将整个短代码渲染为markdown,所以必须遵守CommonMark规范中提供的关于缩进和原始HTML块的规则。
layouts/shortcodes/card.html
<div class="card">
{{ with .Get "title" }}
<div class="card-title">{{ . }}</div>
{{ end }}
<div class="card-content">
{{ trim .Inner "\r\n" }}
</div>
</div>
这个示例与之前的示例之间的区别是微妙但必需的。请注意缩进的更改、空行的添加和RenderString
方法的移除。
--- layouts/shortcodes/a.html
+++ layouts/shortcodes/b.html
@@ -1,8 +1,9 @@
<div class="card">
{{ with .Get "title" }}
- <div class="card-title">{{ . }}</div>
+ <div class="card-title">{{ . }}</div>
{{ end }}
<div class="card-content">
- {{ trim .Inner "\r\n" | .Page.RenderString }}
+
+ {{ trim .Inner "\r\n" }}
</div>
</div>