在jekyll / liquid

时间:2017-12-13 15:36:47

标签: jekyll liquid

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

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

_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 / redpost.html

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

然后在我的顶级页面中,我想循环遍历所有帖子,使用适当的模板渲染它们,并连接结果。显然没有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>

没有插件可以实现吗?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

<强> _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>