在 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 %}
我正在尝试创建一个 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 %}