Inner
返回 shortcode 开始和结束标签之间的内容,适用于 shortcode 调用包含结束标签的情况。
Syntax
SHORTCODE.Inner
Returns
template.HTML
此内容:
content/services.md
{{< card title="Product Design" >}}
We design the **best** widgets in the world.
{{< /card >}}使用此 shortcode:
layouts/_shortcodes/card.html
<div class="card">
{{ with .Get "title" }}
<div class="card-title">{{ . }}</div>
{{ end }}
<div class="card-content">
{{ .Inner | strings.TrimSpace }}
</div>
</div>渲染为:
<div class="card">
<div class="card-title">Product Design</div>
<div class="card-content">
We design the **best** widgets in the world.
</div>
</div>shortcode 开始和结束标签之间的内容可能包含前导和/或尾随换行符,具体取决于 Markdown 中的位置。使用 strings.TrimSpace 函数如上所示来删除回车符和换行符。
在上面的示例中,Inner 返回的值是 Markdown,但它被渲染为纯文本。使用以下任一方法将 Markdown 渲染为 HTML。
使用 RenderString
让我们修改上面的示例,将 Inner 返回的值通过 Page 对象上的 RenderString 方法:
layouts/_shortcodes/card.html
<div class="card">
{{ with .Get "title" }}
<div class="card-title">{{ . }}</div>
{{ end }}
<div class="card-content">
{{ .Inner | strings.TrimSpace | .Page.RenderString }}
</div>
</div>Hugo 将其渲染为:
<div class="card">
<div class="card-title">Product design</div>
<div class="card-content">
We produce the <strong>best</strong> widgets in the world.
</div>
</div>您可以使用 markdownify 函数代替 RenderString 方法,但后者更灵活。请参阅 详情。
替代表示法
调用 shortcode 时不使用 {{< >}} 表示法,而使用 {{% %}} 表示法:
content/services.md
{{% card title="Product Design" %}}
We design the **best** widgets in the world.
{{% /card %}}当您使用 {{% %}} 表示法时,Hugo 将整个 shortcode 渲染为 Markdown,需要进行以下更改。
首先,配置渲染器以允许 Markdown 中的原始 HTML:
markup:
goldmark:
renderer:
unsafe: true
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
{
"markup": {
"goldmark": {
"renderer": {
"unsafe": true
}
}
}
}
如果_您_控制内容,此配置不是不安全的。阅读更多关于 Hugo 的 安全模型。
其次,因为我们将整个 shortcode 渲染为 Markdown,我们必须遵守 CommonMark 规范中提供的有关 缩进 和包含 原始 HTML 块 的规则。
layouts/_shortcodes/card.html
<div class="card">
{{ with .Get "title" }}
<div class="card-title">{{ . }}</div>
{{ end }}
<div class="card-content">
{{ .Inner | strings.TrimSpace }}
</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">
- {{ .Inner | strings.TrimSpace | .Page.RenderString }}
+
+ {{ .Inner | strings.TrimSpace }}
</div>
</div>
使用 Markdown 表示法 调用 shortcode 时,不要使用 RenderString 或 markdownify 处理 Inner 值。