短代码
什么是短代码
Hugo 偏爱 Markdown,因为它具有简单的内容格式,但有时 Markdown 也力不从心。内容作者常常被迫在 Markdown 内容中添加原始 HTML(例如视频 <iframe>
)。我们认为这与 Markdown 语法简洁优雅的特性相矛盾。
Hugo 创建了 短代码 来规避这些限制。
短代码是内容文件中一个简单的代码片段,Hugo 将使用预定义的模板对其进行渲染。请注意,短代码在模板文件中不起作用。如果您需要短代码提供的这种即插即用功能,但在模板中使用,则很可能需要使用 局部模板 。
除了更简洁的 Markdown 之外,还可以随时更新短代码以反映新的类、技术或标准。在站点生成时,Hugo 短代码将轻松合并您的更改。您可以避免可能很复杂的查找和替换操作。
使用短代码
在您的内容文件中,可以通过调用 {{% shortcodename arguments %}}
来调用短代码。短代码参数用空格分隔,包含内部空格的参数必须用引号括起来。
短代码声明中的第一个词始终是短代码的名称。参数在名称之后。根据短代码的定义方式,参数可以是命名的、位置的或两者兼有,尽管您不能在一个调用中混合参数类型。命名参数的格式模仿 HTML,格式为 name="value"
。
某些短代码使用或需要闭合短代码。与 HTML 一样,开头和结尾的短代码(仅名称)匹配,结尾声明前面加一个斜杠。
以下是两个配对短代码的示例:
{{% mdshortcode %}}Stuff to `process` in the *center*.{{% /mdshortcode %}}
{{< highlight go >}} A bunch of code here {{< /highlight >}}
上面的示例使用了两种不同的分隔符,区别在于第一个示例使用 %
字符,第二个示例使用 <>
字符。
带有原始字符串参数的短代码
您可以使用原始字符串文字将多行作为参数传递给短代码:
{{< myshortcode `This is some <b>HTML</b>,
and a new line with a "quoted string".` >}}
使用 Markdown 的短代码
使用 %
作为最外层分隔符的短代码将在发送到内容渲染器时完全渲染。这意味着短代码的渲染输出可以成为页面目录、脚注等的一部分。
不使用 Markdown 的短代码
<
字符表示短代码的内部内容不需要进一步渲染。通常,不使用 Markdown 的短代码包含内部 HTML:
{{< myshortcode >}}<p>Hello <strong>World!</strong></p>{{< /myshortcode >}}
嵌套短代码
您可以通过创建利用 .Parent
方法的自定义模板,在其他短代码中调用短代码。 .Parent
允许您检查调用短代码的上下文。请参阅 短代码模板 。
嵌入式短代码
根据需要使用这些嵌入式短代码。
comment
New in v0.137.1使用 comment
短代码在 Markdown 中包含注释。Hugo 在渲染站点时会排除封装的文本。
示例用法:
{{% comment %}} TODO: 重写下面的段落。 {{% /comment %}}
虽然您可以使用 {{< >}}
表示法调用此短代码,但在计算上,使用上面所示的 {{% %}}
表示法调用它效率更高。
details
New in v0.140.0使用 details
短代码创建 details
HTML 元素。例如:
{{< details summary="See the details" >}}
This is a **bold** word.
{{< /details >}}
Hugo 将其渲染为:
<details>
<summary>See the details</summary>
<p>This is a <strong>bold</strong> word.</p>
</details>
details 短代码接受以下命名参数:
- summary
- (
string
) 从 Markdown 渲染到 HTML 的子summary
元素的内容。默认为Details
。 - open
- (
bool
) 是否最初显示details
元素的内容。默认为false
。 - class
- (
string
) 元素的class
属性的值。 - name
- (
string
) 元素的name
属性的值。 - title
- (
string
) 元素的title
属性的值。
figure
figure
短代码可以使用以下命名参数:
- src
- 要显示的图像的 URL。
- link
- 如果需要将图像超链接,则为目标的 URL。
- target
- 如果设置了
link
参数,则为 URL 的可选target
属性。 - rel
- 如果设置了
link
参数,则为 URL 的可选rel
属性。 - alt
- 如果无法显示图像,则为图像的替代文本。
- title
- 图像标题。
- caption
- 图像标题。
caption
值中的 Markdown 将被渲染。 - class
- HTML
figure
标记的class
属性。 - height
- 图像的
height
属性。 - width
- 图像的
width
属性。 - loading
- 图像的
loading
属性。 - attr
- 图像署名文本。
attr
值中的 Markdown 将被渲染。 - attrlink
- 如果需要将署名文本超链接,则为目标的 URL。
示例用法:
{{< figure src="elephant.jpg" title="An elephant at sunset" >}}
渲染结果:
<figure>
<img src="elephant.jpg">
<figcaption><h4>An elephant at sunset</h4></figcaption>
</figure>
gist
要显示具有此 URL 的 GitHub gist :
https://gist.github.com/user/50a7482715eac222e230d1e64dd9a89b
在 Markdown 中包含此内容:
{{< gist user 50a7482715eac222e230d1e64dd9a89b >}}
这将按文件名以字母顺序显示 gist 中的所有文件。
要显示 gist 中的特定文件:
{{< gist user 23932424365401ffa5e9d9810102a477 list.html >}}
渲染结果:
highlight
要显示突出显示的代码示例:
{{< highlight go-html-template >}}
{{ range .Pages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}
{{< /highlight >}}
渲染结果:
{{ range .Pages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}
要指定一个或多个 突出显示选项 ,请包含一个用引号括起来的、逗号分隔的列表:
{{< highlight go-html-template "lineNos=inline, lineNoStart=42" >}}
{{ range .Pages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}
{{< /highlight >}}
渲染结果:
42{{ range .Pages }}
43 <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
44{{ end }}
要显示具有此 URL 的 Instagram 帖子:
https://www.instagram.com/p/CxOWiQNP2MO/
在 Markdown 中包含此内容:
{{< instagram CxOWiQNP2MO >}}
渲染结果:
param
param
短代码渲染页面前题字中的参数,并回退到同名站点参数。如果参数不存在,短代码将引发错误。
示例用法:
{{< param testparam >}}
通过链接访问嵌套值:
{{< param my.nested.param >}}
ref
ref
短代码返回给定页面引用的永久链接。
示例用法:
[Post 1]({{% ref "/posts/post-1" %}})
[Post 1]({{% ref "/posts/post-1.md" %}})
[Post 1]({{% ref "/posts/post-1#foo" %}})
[Post 1]({{% ref "/posts/post-1.md#foo" %}})
渲染结果:
<a href="http://example.org/posts/post-1/">Post 1</a>
<a href="http://example.org/posts/post-1/">Post 1</a>
<a href="http://example.org/posts/post-1/#foo">Post 1</a>
<a href="http://example.org/posts/post-1/#foo">Post 1</a>
relref
relref
短代码返回给定页面引用的永久链接。
示例用法:
[Post 1]({{% relref "/posts/post-1" %}})
[Post 1]({{% relref "/posts/post-1.md" %}})
[Post 1]({{% relref "/posts/post-1#foo" %}})
[Post 1]({{% relref "/posts/post-1.md#foo" %}})
渲染结果:
<a href="/posts/post-1/">Post 1</a>
<a href="/posts/post-1/">Post 1</a>
<a href="/posts/post-1/#foo">Post 1</a>
<a href="/posts/post-1/#foo">Post 1</a>
要显示具有此 URL 的 Twitter 帖子:
https://x.com/SanDiegoZoo/status/1453110110599868418
在 Markdown 中包含此内容:
{{< twitter user="SanDiegoZoo" id="1453110110599868418" >}}
渲染结果:
Owl bet you'll lose this staring contest 🦉 pic.twitter.com/eJh4f2zncC
— San Diego Zoo Wildlife Alliance (@sandiegozoo) October 26, 2021
vimeo
要显示具有此 URL 的 Vimeo 视频:
https://vimeo.com/channels/staffpicks/55073825
在 Markdown 中包含此内容:
{{< vimeo 55073825 >}}
渲染结果:
youtube
要显示具有此 URL 的 YouTube 视频:
https://www.youtube.com/watch?v=0RKpf3rK57I
在 Markdown 中包含此内容:
{{< youtube 0RKpf3rK57I >}}
渲染结果:
youtube 短代码接受以下命名参数:
- id
- (
string
) 视频id
。如果像上面示例中那样以位置参数提供id
,则可选。 - allowFullScreen
- New in v0.125.0
- (
bool
)<iframe>
元素是否可以激活全屏模式。默认为true
。 - autoplay
- New in v0.125.0
- (
bool
) 是否自动播放视频。强制mute
为true
。默认为false
。 - class
- (
string
) 包装div
元素的class
属性。指定此属性时,将从iframe
元素及其包装div
元素中删除style
属性。 - controls
- New in v0.125.0
- (
bool
) 是否显示视频控件。默认为true
。 - end
- New in v0.125.0
- (
int
) 播放器应停止播放视频的时间(以视频开始时的秒数计)。 - loading
- New in v0.125.0
- (
string
)iframe
元素的加载属性,eager
或lazy
。默认为eager
。 - loop
- New in v0.125.0
- (
bool
) 是否无限重复视频。第一次播放后忽略start
和end
参数。默认为false
。 - mute
- New in v0.125.0
- (
bool
) 是否静音视频。当autoplay
为true
时始终为true
。默认为false
。 - start
- New in v0.125.0
- (
int
) 播放器应开始播放视频的时间(以视频开始时的秒数计)。 - title
- (
string
)iframe
元素的title
属性。默认为“YouTube 视频”。
使用上述部分参数的示例:
{{< youtube id=0RKpf3rK57I start=30 end=60 loading=lazy >}}
隐私配置
要了解如何配置您的 Hugo 站点以符合新的欧盟隐私法规,请参阅 隐私保护 。
创建自定义短代码
要了解有关创建自定义短代码的更多信息,请参阅 短代码模板文档 。