我正在尝试创建一个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>
没有插件可以实现吗?
答案 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>