Rongbin Fan

Hugo Markdownify 无法生成 <p> tag

加个条件判断

在尝试为 Stream 页面利用 Hugo Shortcodes 添加新的 movie和 tv 标签时, 使用{{ .Inner | Markdownify }}无法正确对 Markdown 文本生成 HTML<p>tag。

例如:

{{ $text .= "What a *nice* day!" }}
{{ $text | Markdownify}} -> What a <em>nice</em> day!

但我预期生成的应是:

{{ $text | Markdownify }} -> <p>What a <em>nice</em> day!</p>

这是个老问题:Markdownify 最主要被用来生成标题之类的 inline 元素, 而不是类似段落的 blocks。 但很多 Hugo 主题都在使用 Markdownify, 所以一时想要用 RenderString 取代也不太可能。

解决方法

在我的情况中, 先识别是否存在<p>tag 的方式:

{{ $markdown := .intro | markdownify }}

{{ if not ( strings.Contains $markdown "<p>" ) }}
    <p>{{ $markdown }}</p>
{{ else }}
    {{ $markdown }}
{{ end }}

或进一步 匹配以 h、 p 开头的 tag 都可以:

{{ $markdown := .text | markdownify }}

{{ if not ( findRE "<[h|p][^>]*>" $markdown ) }}
    <p>{{ $markdown }}</p>
{{ else }}
    {{ $markdown }}
{{ end }}