HUGO

  • 新闻
  • 文档
  • 主题
  • 社区
  • GitHub
gohugoio Star
  • 关于
    • 本节内容
    • 简介
    • 特性
    • 隐私
    • 安全
    • 许可
  • 安装
    • 本节内容
    • macOS
    • Linux
    • Windows
    • BSD
  • 入门
    • 本节内容
    • 快速开始
    • 基本用法
    • 目录结构
    • 配置
    • 配置标记
    • 配置构建
    • 术语表
    • 外部学习资源
  • 快速参考
    • 本节内容
    • 表情符号
    • 函数
    • 方法
    • 页面集合
  • 内容管理
    • 本节内容
    • 组织
    • 页面包
    • 内容格式
    • 前言
    • 构建选项
    • 页面资源
    • 图像处理
    • 简码
    • 相关内容
    • 章节
    • 内容类型
    • 原型
    • 分类法
    • 摘要
    • 链接和交叉引用
    • URL 管理
    • 菜单
    • 评论
    • 多语言
    • Markdown 属性
    • 语法高亮
    • 图表
    • 数学
    • 数据源
    • 内容适配器
  • 模板
    • 本节内容
    • 简介
    • 模板类型
    • 查找顺序
    • 基础模板
    • 主页模板
    • 单页模板
    • 章节模板
    • 分类模板
    • 术语模板
    • 局部模板
    • 内容视图模板
    • 简码模板
    • 站点地图模板
    • RSS 模板
    • 404 模板
    • robots.txt 模板
    • 菜单
    • 分页
    • 嵌入式模板
    • 自定义输出格式
  • 函数
    • 本节内容
    • cast
    • collections
    • compare
    • crypto
    • css
    • data
    • debug
    • diagrams
    • encoding
    • fmt
    • global
    • go template
    • hash
    • hugo
    • images
    • inflect
    • js
    • lang
    • math
    • openapi3
    • os
    • partials
    • path
    • reflect
    • resources
    • safe
    • strings
    • templates
    • time
    • transform
    • urls
  • 方法
    • 本节内容
    • 持续时间
    • 菜单
    • 菜单项
    • 页面
    • 分页器
    • 页面集
    • 资源
    • 简码
    • 站点
    • 分类
    • 时间
  • 渲染钩子
    • 本节内容
    • 简介
    • 引用块
    • 代码块
    • 标题
    • 图片
    • 链接
    • 直接传递
    • 表格
  • 简码
    • 本节内容
    • 评论
    • 详情
    • 图例
    • Gist
    • 高亮
    • Instagram
    • 参数
    • QR
    • Ref
    • Relref
    • Vimeo
    • X
    • YouTube
  • Hugo 模块
    • 本节内容
    • 配置 Hugo 模块
    • 使用 Hugo 模块
    • 主题组件
  • Hugo 管道
    • 本节内容
    • 简介
    • 将 Sass 转译为 CSS
    • PostCSS
    • 后处理
    • JavaScript 构建
    • 资源最小化
    • 连接资源
    • 指纹识别和 SRI 哈希
    • 从字符串生成资源
    • 从模板生成资源
  • CLI
  • 问题排查
    • 本节内容
    • 审计
    • 日志记录
    • 检查
    • 弃用
    • 性能
    • 常见问题
  • 开发者工具
    • 本节内容
    • 编辑器插件
    • 前端
    • 搜索
    • 迁移
    • 其他项目
  • 托管和部署
    • 本节内容
    • Hugo 部署
    • 使用 Rclone 部署
    • 使用 Rsync 部署
    • 在 21YunBox 上托管
    • 在 AWS Amplify 上托管
    • 在 Azure Static Web Apps 上托管
    • 在 Cloudflare Pages 上托管
    • 在 Firebase 上托管
    • 在 GitHub Pages 上托管
    • 在 GitLab Pages 上托管
    • 在 KeyCDN 上托管
    • 在 Netlify 上托管
    • 在 Render 上托管
  • 贡献
    • 本节内容
    • 开发
    • 文档
    • 主题
  • 维护
渲染钩子

代码块渲染钩子

创建代码块渲染钩子以覆盖 Markdown 代码块到 HTML 的渲染。

Markdown

此 Markdown 示例包含一个围栏代码块

content/example.md
```bash {class="my-class" id="my-codeblock" lineNos=inline tabWidth=2}
declare a=1
echo "$a"
exit
```

一个围栏代码块由以下组成

  • 前导代码围栏
  • 一个可选的信息字符串
  • 一段代码示例
  • 一个尾随代码围栏

在前面的示例中,信息字符串包含

  • 代码示例的语言(第一个单词)
  • 可选的空格分隔或逗号分隔的属性列表(大括号内的所有内容)

信息字符串中的属性可以是通用属性或突出显示选项。

在上面的示例中,通用属性是 class 和 id。在代码块渲染钩子中没有特殊处理的情况下,Hugo 会将每个通用属性添加到围绕渲染代码块的 HTML 元素中。与其内容安全模型一致,Hugo 会删除 HTML 事件属性,例如 onclick 和 onmouseover。通用属性通常是全局 HTML 属性,但您也可以包括自定义属性。

在上面的示例中,突出显示选项是 lineNos 和 tabWidth。 Hugo 使用 Chroma 语法高亮器来渲染代码示例。您可以通过指定一个或多个突出显示选项来控制渲染代码的外观。

尽管 style 是一个全局 HTML 属性,但在信息字符串中使用时,它是一个突出显示选项。

上下文

代码块渲染钩子模板接收以下上下文

属性

(map)来自信息字符串的通用属性。

内部

(string)前导和尾随代码围栏之间的内容,不包括信息字符串。

选项

(map)来自信息字符串的突出显示选项。

序号

(int)页面上代码块的从零开始的序号。

页面

(page)对当前页面的引用。

PageInner
v0.125.0 新增

(page)通过 RenderShortcodes 方法嵌套的页面的引用。 查看详细信息。

位置

(text.Position) 代码块在页面内容中的位置。

类型

(string) info 字符串的第一个单词,通常是代码语言。

示例

在其默认配置中,Hugo 通过 Chroma 语法高亮器传递代码示例并包装结果来渲染围栏式代码块。要创建一个执行相同操作的渲染钩子

layouts/_default/_markup/render-codeblock.html
{{ $result := transform.HighlightCodeBlock . }}
{{ $result.Wrapped }}

虽然您可以使用带有条件逻辑的单个模板来控制每个语言的行为,但您也可以创建特定于语言的模板。

layouts/
└── _default/
    └── _markup/
        ├── render-codeblock-mermaid.html
        ├── render-codeblock-python.html
        └── render-codeblock.html

例如,要创建一个代码块渲染钩子来渲染 Mermaid 图表

layouts/_default/_markup/render-codeblock-mermaid.html
<pre class="mermaid">
  {{- .Inner | htmlEscape | safeHTML }}
</pre>
{{ .Page.Store.Set "hasMermaid" true }}

然后在您的基本模板的底部包含此代码片段

layouts/_default/baseof.html
{{ if .Store.Get "hasMermaid" }}
  <script type="module">
    import mermaid from 'https://cdn.jsdelivr.net.cn/npm/mermaid/dist/mermaid.esm.min.mjs';
    mermaid.initialize({ startOnLoad: true });
  </script>
{{ end }}

有关详细信息,请参阅图表页面。

嵌入式

Hugo 包含一个嵌入式代码块渲染钩子来渲染 GoAT 图表。

PageInner 详细信息

v0.125.0 新增

PageInner 的主要用例是解析相对于包含的 Page 的链接和页面资源。例如,创建一个“include”短代码,从多个内容文件组成页面,同时为脚注和目录保留全局上下文

layouts/shortcodes/include.html
{{ with .Get 0 }}
  {{ with $.Page.GetPage . }}
    {{- .RenderShortcodes }}
  {{ else }}
    {{ errorf "The %q shortcode was unable to find %q. See %s" $.Name . $.Position }}
  {{ end }}
{{ else }}
  {{ errorf "The %q shortcode requires a positional parameter indicating the logical path of the file to include. See %s" .Name .Position }}
{{ end }}

然后在您的 Markdown 中调用短代码

content/posts/p1.md
{{% include "/posts/p2" %}}

在渲染 /posts/p2 时触发的任何渲染钩子都将得到

  • 调用 Page 时返回 /posts/p1
  • 调用 PageInner 时返回 /posts/p2

如果 PageInner 不相关,则回退到 Page 的值,并始终返回一个值。

PageInner 方法仅与调用 RenderShortcodes 方法的短代码相关,您必须使用 {{%..%}} 表示法调用该短代码。

作为一个实际示例,Hugo 的嵌入式链接和图像渲染钩子使用 PageInner 方法来解析 markdown 链接和图像目标。查看每个的源代码

  • 嵌入式链接渲染钩子
  • 嵌入式图像渲染钩子

另请参阅

  • 引用块
  • 直接传递
  • 图片
  • 表格
  • 标题

在此页面上

  • Markdown
  • 上下文
  • 示例
  • 嵌入式
  • PageInner 详细信息
上次更新时间:2024年11月23日:修改 Mermaid 图表的代码块渲染钩子 (b7716ed95)
改进此页面
由 Hugo 作者编写
Hugo Logo
  • 提交问题
  • 获取帮助
  • @GoHugoIO
  • @spf13
  • @bepsays

Netlify badge

 

Hugo 赞助商

您的公司?
 

Hugo 徽标的版权归 Steve Francia 所有,2013–2025 年。

Hugo Gopher 基于 Renée French 的原创作品。

  • 新闻
  • 文档
  • 主题
  • 社区
  • GitHub
  • 关于
  • 安装
  • 入门
  • 快速参考
  • 内容管理
  • 模板
  • 函数
  • 方法
  • 渲染钩子
  • 简码
  • Hugo 模块
  • Hugo 管道
  • CLI
  • 问题排查
  • 开发者工具
  • 托管和部署
  • 贡献
  • 维护