表格
创建表格渲染钩子,遍历表头与表体单元格,覆盖 Markdown 表格到 HTML 的转换。
上下文
表格渲染钩子模板接收以下上下文:
Attributes- (
map)Markdown 属性,需要按下面的方式配置站点后才可用:[markup.goldmark.parser.attribute] block = true Ordinal- (
int)表格在页面中的序号,从 0 开始。 Page- (
page)当前页面的引用。 PageInner- (
page)通过RenderShortcodes方法嵌套的页面的引用。详见下文 PageInner details。 Position- (
string)表格在页面内容中的位置。 THead- (
slice)表头行的切片,其中每个元素是一行单元格的切片。 TBody- (
slice)表体行的切片,其中每个元素是一行单元格的切片。
表格单元格
THead 与 TBody 返回的是「切片的切片」,其中每个表格单元格具有以下字段:
Alignment- (
string)单元格内文本的对齐方式,取值为left、center或right。 Text- (
template.HTML)单元格内的文本。
示例
默认配置下,Hugo 按 GitHub 风格 Markdown 规范渲染 Markdown 表格。要写出行为一致的渲染钩子:
<table
{{- range $k, $v := .Attributes }}
{{- if $v }}
{{- printf " %s=%q" $k $v | safeHTMLAttr }}
{{- end }}
{{- end }}>
<thead>
{{- range .THead }}
<tr>
{{- range . }}
<th
{{- with .Alignment }}
{{- printf " style=%q" (printf "text-align: %s" .) | safeHTMLAttr }}
{{- end -}}
>
{{- .Text -}}
</th>
{{- end }}
</tr>
{{- end }}
</thead>
<tbody>
{{- range .TBody }}
<tr>
{{- range . }}
<td
{{- with .Alignment }}
{{- printf " style=%q" (printf "text-align: %s" .) | safeHTMLAttr }}
{{- end -}}
>
{{- .Text -}}
</td>
{{- end }}
</tr>
{{- end }}
</tbody>
</table>使用要点
模板对 THead 与 TBody 各做一次外层遍历得到行,再对每一行做一次内层遍历得到单元格,因此表头与表体的结构完全由模板决定:可以给表头行加 scope 属性、给表格外层加 class,或者按列拆分渲染。
Alignment 为空字符串时表示该列没有显式对齐要求,上例用 with 判断后再输出 style,避免产生多余的空属性。单元格内容已经是 template.HTML,直接输出即可;确有必要拼接属性时,应像上例那样通过 safeHTMLAttr 处理,以免属性被转义。
只要提供了表格钩子,输出的 <table> 结构就由模板负责,表头、表体与单元格都不能遗漏,否则页面结构会不完整。