在 jekyll/liquid 中将具有不同布局的帖子合并到一个页面上

Combining posts with different layouts on one page in jekyll/liquid

我正在尝试创建一个 Jekyll 页面,其中按顺序列出了我的所有 post。问题是一些 post 使用不同的布局,然后在 post 前文中指定。我已经为 post 禁用了单独的页面输出(实际上是一个自定义类别),所以布局是局部的。

例如,假设我有一些红色 posts 和绿色 posts:

_posts/01_post1.md:

---
layout: redpost
---
Post 1 (red)

_posts/02_post2.md:

---
layout: greenpost
---
Post 2 (green)

我希望使用正确的布局对这些进行处理。我也更喜欢使用继承,我认为这排除了 {%include%}.

的使用

_layouts/post.html:

<article class="post">
{{ content }}
</article>

_layouts/红色post.html:

---
layout: post
---
<div style="color:red">
{{ content }}
</div>

然后在我的顶级页面中,我想遍历所有 post,使用适当的模板呈现它们,然后连接结果。显然不存在 RENDER 过滤器,尽管我可能只是无法在文档中找到它的名称。

_layouts/index.html:

<html>
...
{% for post in site.posts %}
{{ post | RENDER }}
{% endfor %}
</html>

所需的最终 HTML 将如下所示:

<html>
<article class="post">
  <div style="color:red">
    <p>Post 1 (red)</p>
  </div>
</article>
<article class="post">
  <div style="color:green">
    <p>Post 2 (green)</p>
  </div>
</article>
</html>

这可以不用插件吗?

以下有什么问题吗?对我来说似乎是一个解决方案。

_layouts/index.html:

<html>
...
{% for post in site.posts %}
    {% include post.html %}
{% endfor %}
</html>

_includes/post.html:

<article class="post">
  {% if post.layout == 'greenpost' %}
    {% include greenpost.html %}
  {% endif %}
</article>

_includes/greenpost.html:

<div style="color:green">
  {{ post.content }}
</div>

解决方案很简单,这就是文档中未提及的原因。只需直接打印文档对象即可使用正确的模板呈现:

{% for post in site.posts %}
  {{ post }}
{% endfor %}