简码(Shortcode)
简码,顾名思义"用于简化操作的代码块"。
我们在文章内容 content/**.md 可以重复多处调用这种代码块来减少重复性操作。
区分: 简码(Shortcode)和模板变量与函数(Template variable and function)
模板的设计初衷是简化操作,避免重复编码。但是如果(表达作者思想的)文章中出现大量(页面渲染和逻辑判断相关的)模板语句会使文章管理变得混乱。
为了避免上述问题,Hugo 提出简码的概念: 文章作者不能直接在文章中使用模板语言,但是可以使用模板语言封装后的"简码(Shortcode)"。简码封装了模板语言涉及的html和逻辑判断。使用简码只需要传入必要参数即可。
- 模板变量调用:
{{ .Title }}- 模板函数调用:
{{ dict "title" .Title content" "hello!" | jsonify }}- 简码调用:
{{< highlight go >}} hello {{< /highlight >}}总结: 模板只能在
layouts/中使用;简码只能在content/中使用。这样就划分了两个角色: 编写模板的主题作者和编写文章的内容作者!
官方文档:
- https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes (内置简码列表)
- https://gohugo.io/templates/shortcode-templates/ (自定义简码)
- https://gohugo.io/variables/shortcodes/ (自定义简码中可用变量)
调用
有两种调用形式:
{{< ... >}}—— 不对传入参数进行处理{{% ... %}}—— 对传入参数进行加工,如进行markdown标志的解析
有三种参数传递形式:
{{< shortcodename >}}—— 不传参{{< shortcodename parameters >}}—— 传入"string"或者key="value"形式的参数 (简码中会通过.Get函数获取传入参数){{< shortcodename >}} inner string {{< /shortcodename >}}—— 用两个简码标记包裹字符串 (简码中会通过.Inner变量获取包裹的字符串)
简码"不解析"
有的时候,我们就希望简码字符直接以字符形式显示,像 “{{< string >}}” 这样。这时我们只需要将内容用 /* ... */ 包裹,如 “{{</* string */>}}” 写在 .md 文件中。
Last modified November 4, 2023: Correcting content dir (da1a055)