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">&times;</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

编辑

当我使用标签 &lt; &gt; 而不是 % % 时,它可以工作。但我可能会在内部文本中放一些降价,因此想使用% %

如果我理解正确,使用% % 将首先处理内部文本中的降价,然后将其作为.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。您返回的内容包括 &lt;div(和更多 HTML 标签),并且 Goldmark 默认不呈现原始 HTML。如果您使用&lt;,则返回的内容不会被标记渲染器处理,而是被解释为输出格式,在您的情况下为 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”的主要内容,如果未能解决你的问题,请参考以下文章

我忽略了快捷方式编程语言?

这是静默忽略Ruby异常的最短方法

WordPress短代码只接受默认属性

debounce 忽略所有调用,除了最后一个使用 lodash

Excel忽略了其他工作簿中可用的代码

我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?