Markdown渲染钩子
4 分钟阅读
Markdown Render Hooks - Markdown渲染钩子
https://gohugo.io/templates/render-hooks/
渲染钩子允许自定义模板覆盖markdown渲染功能。
请注意,这只支持Goldmark渲染器。
您可以通过在layouts/_default/_markup中创建名称为render-{kind}的模板来覆盖默认的Markdown渲染为HTML的某些部分。
您还可以在layouts/[type/section]/_markup中创建特定于type/section的钩子,例如:layouts/blog/_markup。
目前支持的钩子种类有:
imagelinkheadingcodeblockNew in v0.93.0
如果需要,您可以定义特定于输出格式和语言的模板。您的layouts文件夹可能如下所示:
| |
以下是上述用法的一些示例:
- 使用
.GetPage解析链接引用。这将使链接可移植,因为您可以将./my-post.md(和在GitHub上可以使用的类似构造)转换为/blog/2019/01/01/my-post/等。 - 为外部链接添加
target=_blank。 - 解析和处理图像。
- 添加标题链接。
渲染钩子应用于标题、链接和图像
传递给render-link和render-image的上下文
render-link和render-image模板将接收到以下上下文:
Page
正在被渲染的Page。
Destination
The URL.
Title
title属性。
Text
渲染后的(HTML)链接文本。
PlainText
上述文本的纯文本版本。
传递给render-heading的上下文
render-heading模板将接收以下上下文:
Page
正在被渲染的页面。
Level
标题级别(1-6)
Anchor
在该页面中唯一的自动生成的HTML id。
Text
被渲染后的(HTML)文本。
PlainText
上述内容的纯文本版本。
Attributes (map)
一个属性映射(例如
id、class)。需要注意的是,对于链接,这个映射目前始终为空。
The render-image templates will also receive:
render-image模板还将接收:
IsBlock New in v0.108.0
如果这是一个独立的图像并且配置选项markup.goldmark.parser.wrapStandAloneImageWithinParagraph被禁用,则返回true。
Ordinal New in v0.108.0
当前文档中所有图像的基于零的序数。
带标题的Markdown链接示例
| |
以下是render-link.html模板的代码示例:
layouts/_default/_markup/render-link.html
| |
图像Markdown示例
| |
以下是render-image.html模板的代码示例:
layouts/_default/_markup/render-image.html
| |
标题链接示例
给定此模板文件
layouts/_default/_markup/render-heading.html
| |
以及这个 markdown
| |
渲染出的 HTML 代码将是
| |
代码块的渲染钩子
您可以为所有代码块或特定类型/语言(例如下面的bash)添加钩子模板:

这些代码块的默认行为是进行代码高亮,但是由于可以向这些代码块传递属性,因此它们可以用于几乎任何事情。一个示例是内置的GoAT Diagrams或这个Mermaid Diagram Code Block Hook示例。
代码块模板中您可以获取到的上下文(".")包括:
Type (string)
代码块的类型。这将是编程语言,例如
bash,用于进行代码高亮。Attributes (map)
从Markdown传递的属性(例如
{ attrName1=attrValue1 attrName2="attr Value 2" })。Options (map)
Chroma 高亮处理选项。仅在
Type是已知的 Chroma Lexer 时才填充。Inner (string)
代码围栏之间的文本。
Ordinal (integer)
当前文档中所有代码块的从零开始的序数。
Page
所属的
Page。Position
在错误日志中有用,因为它会打印出文件名和位置(行号、列号),例如
{{ errorf "error in code block: %s" .Position }}。
另请参阅
- .RenderString
- [内容格式 (https://gohugo.io/content-management/formats/)
- 简码
- anchorize
- markdownify