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 }}