防止降价文件中包含的 HTML 被 Jekyll 进一步处理?

Geo*_*ins 6 markdown jekyll redcarpet

我正在与 Jekyll 合作,并希望使用{% include... %}在 Markdown 文件中包含一段 HTML 代码,而无需进一步处理该 HTML,即然后由 Markdown 处理器处理,就好像它只是内联 HMTL 一样。

注意:我使用的是redcarpet markdown(而不是例如 kramdown)。

这可以用 Jekyll 插件处理吗?

我创建了一个 GitHub 存储库md-include-html,其中包含演示我的问题的以下文件。

1._layouts/default.html包含:

<div>
{{ content }}
</div>
Run Code Online (Sandbox Code Playgroud)

2.md-page.md包含:

---
layout: default
---
A

{% include_relative html-snippet.html %}

B
Run Code Online (Sandbox Code Playgroud)

3.html-snippet.html包含:

</div>
<!-- Some arbitrary HTML for {{ page.path }} -->
<div>
Run Code Online (Sandbox Code Playgroud)

请注意,我首先尝试关闭将引入的 div,_layouts/default.html然后在最后打开一个新的 div。

这导致_site/md-page.html

<div>
<p>A</p>

<p></div>
&lt;!-- Some arbitrary HTML for md-page.md --&gt;
<div></p>
Run Code Online (Sandbox Code Playgroud)

看看我的评论是如何被处理的,我的内容被包裹在<p>...</p>.

似乎包含发生在降价处理之前,并且无法告诉降价处理器以不同的方式处理包含的文本。

所以我可以在 HTML 文件中包含这样的降价(见html-page.html我的回购):

{% capture snippet_content %}
{% include_relative md-snippet.md %}
{% endcapture %}
{{ snippet_content | markdownify }}
Run Code Online (Sandbox Code Playgroud)

但是我不能在 Markdown 文件中包含 HTML。

如果没有降价功能(在 Liquid 中所做的任何事情基本上都发生得太早),我看不出有什么办法可以暂时禁用降价处理。

例如

A

<markdown-off>{% include_relative html-snippet.html %}</markdown-off>

B
Run Code Online (Sandbox Code Playgroud)

是的,我知道标签看起来不是很降价,但你明白我的意思。

有没有办法用 Jekyll 插件来做到这一点?我查看了 Jekyll 文档的插件页面中提到的那些,但没有立即发现任何内容。

Rob*_*nny 2

我知道一个老问题,但是你尝试过将它包装在 吗{% raw %} {% endraw %}

尝试

</div>
{% raw}
<!-- Some arbitrary HTML for {{ page.path }} -->
{% endraw %}
<div>
Run Code Online (Sandbox Code Playgroud)

这应该会停止模板引擎的处理。

将注释缩进 4 个空格意味着 Markdown 会将其视为代码,但 Liquid 仍会处理{{ page.path }}