Jekyll - 如何避免在YAML frontmatter markdownify项目

时间:2015-06-13 22:59:47

标签: ruby jekyll liquid github-pages

好的......我有一个项目,我正在使用Jekyll进行播客项目。我选择通过YAML Front Matter项目列出showotes中的主机:

hosts:
  - Name A
  - Name B
  - Name C

使用这段代码

<li> <strong>Hosts:</strong>
<ul>
  {% for host in page.hosts %}
<li>{{ host }}
{% endfor %}
</ul>

我收到了正确的清单

<ul>
<li> <strong>Hosts:</strong> 
<ul> 
  <li>Name A </li>
  <li>Name B </li>
  <li>Name C </li>
</ul>
</ul>

但是,我想通过

来降低这一点
<li> <strong>Hosts:</strong>
<ul>
  {% for host in page.hosts %}
<li>{{ host | markdownify }}
{% endfor %}
</ul>

但是杰基尔回来了:

<ul>
<li> <strong>Hosts:</strong> 
<ul> 
  <li><p>Name A </p></li>
  <li><p>Name B </p></li>
  <li><p>Name C </p></li>
</ul>
</ul>

是否有任何方法禁止Jekyll将<p>标记添加到列表项中?实际上,如果我想添加任何丰富的格式,我需要将HTML直接放入项目中,但我想通过Markdown'ing Front Matter文本添加它。有什么建议吗?

PS:我的网站托管在Github Pages

3 个答案:

答案 0 :(得分:14)

您可以像这样使用remove filter

inAppBrowser

答案 1 :(得分:0)

嗯...这是一个很老的问题,但仍然是现实的。

您可以像以前David Jacquel answered一样使用| remove: '<p>' | remove: '</p>'。但是它将删除文本中的每个<p>标签。

但是,如果仅在只有一个<p>节点的情况下,要删除<p>标签包裹,则需要更复杂的解决方案。

没有外部插件和过滤器的方法很少。

这是我的解决方案:

{%- assign arr = yourTextVar | markdownify | strip | split: "<p>" -%}
{%- if arr.size > 2 -%}
  {{ arr | join: "<p>" | prepend: "<p>" }}
{%- else -%}
  {{ arr[1] | remove: "</p>" }}
{%- endif -%}

它将在空的<p>标记上拆分文本,并将忽略诸如<p id="my-id">之类的内容

答案 2 :(得分:0)

使用 md.renderInline() 去除 <p> 标签