Hugo 短代码忽略了“省略了原始 HTML”
Posted
技术标签:
【中文标题】Hugo 短代码忽略了“省略了原始 HTML”【英文标题】:Hugo shortcode ignored saying "raw HTML omitted" 【发布时间】:2020-11-21 16:52:13 【问题描述】:我编写了一个短代码来创建一个引导可关闭的警报框。下面是我的短代码layouts/shortcodes/message.html
。
<div class="alert alert-.Get 0 alert-dismissible fade show" role="alert">
.Inner
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
这就是我从内容降价文件中调用的方式:
% message warning%
This can cause build errors
% /message %
但是,在输出 HTML 中,生成了以下代码:
<!-- raw HTML omitted -->
<p>This can cause build errors</p>
<!-- raw HTML omitted -->
我不明白这里有什么问题。我创建了其他简码(虽然不使用 .Inner,但这是我的第一次尝试)并且它们工作正常,例如我为像 pinterest 这样的图像网格创建了一个简码,它接受多达 10 个图像 URL 并输出 HTML。不知道为什么这个特定的 .Inner 短代码会失败。请帮忙。我的 Hugo 版本是v0.74.3/extended darwin/amd64
。
编辑
当我使用标签 < >
而不是 % %
时,它可以工作。但我可能会在内部文本中放一些降价,因此想使用% %
。
如果我理解正确,使用% %
将首先处理内部文本中的降价,然后将其作为.Inner
传递给简码。
【问题讨论】:
【参考方案1】:这是过去 5 天内Newest 'hugo' Questions - Stack Overflow 中最常见的问题!¹
在你的 Hugo 配置文件中,你需要告诉默认的 Markdown 渲染器,即 Goldmark,来渲染原始 HTML。如果您使用 config.yaml,请使用:
markup:
goldmark:
renderer:
unsafe: true
如果您使用 config.toml,请使用:
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
我在我的网站http://www.ii.com/hugo-tips-fragments/#_markup 上写了这篇文章。
¹ 这是我在 5 天内第三次回答此常见问题。另外两次是在Hugo use inline javascript within posts 和Embed iframe Amazon Associate Link into .md file R。
【讨论】:
html 在哪里?如果我理解正确的话,Markdown 渲染器的工作是在控件转到 Markdown 代码之前完成的。换句话说,.Inner
应该在短代码添加包装器 html 之前从 Goldmark 获得处理后的输出。
如果您使用 % message warning %
和 % /message %
,短代码返回的所有内容都会传递给标记渲染器,在您的情况下是 Goldmark。您返回的内容包括 <div
(和更多 HTML 标签),并且 Goldmark 默认不呈现原始 HTML。如果您使用<
,则返回的内容不会被标记渲染器处理,而是被解释为输出格式,在您的情况下为 HTML。
我刚刚用 Markdown[^] 测试了这个,我认为如果你把 $_hugo_config := ` "version": 1 `
放在你的简码代码的顶部,你会得到你所期望的行为。 %
的行为在 Hugo v0.55.0 中发生了变化,对此有很多讨论,例如在 Shortcode - markdown vs html vs table of content - support - HUGO(包括与您相关的信息)[^] 我主要使用 Asciidoc,其中包括显式语法“通过" HTML(+
、+++
、++++
和 pass:
宏
能否将此解决方案发布到 gohugo.io/templates/shortcode-templates 的 hugo 文档中?我敢肯定,很多人都在问这个问题,因为这是每个人都想做的事情。甚至该页面上的教程视频也显示了此错误。 (更好的解决方案是更改此反功能。为什么您希望您的短代码失败,因为您使用 而不是 % %?)
感谢您的解释。这正是我想要的。以上是关于Hugo 短代码忽略了“省略了原始 HTML”的主要内容,如果未能解决你的问题,请参考以下文章