在Jekyll中将集合用于子页面会导致Liquid Exception

时间:2018-12-10 10:47:43

标签: ruby jekyll liquid

为了保持清晰度,我希望将子页面的所有模板文件保留在名为_pages的目录中。由于Jekyll忽略了以_开头的所有目录,因此我需要在_config.yml中添加以下内容:

include:
  - _pages

即使这已经很好地工作了,但是要获得相同结果的更方便的方法是对所有子页面使用collection。这样,在定义诸如共享布局或元数据之类的默认值时,子页面可以以type: pages为目标。

collections:
  pages:
    output: true

虽然以上内容对于另一个项目来说就像一个咒语,但在将其用于当前项目时会抛出以下异常:

Liquid Exception: wrong number of arguments (given 0, expected 1) in /_layouts/content.html

我不知道从包含文件夹方法到收集方法的切换如何产生此错误。更奇怪的是,该消息没有提供行号。

文件content.html用作子页面的主要布局,并具有以下内容:

---
layout: default
---

<div class="o-page o-page--pushed {{ page.style }}">
  {% include navigation.html %}

  <main class="o-page__content{% if page.merge %} u-pv-0x{% endif %}">
    {{ content }}
  </main>

  {% include footer.html %}
</div>

编辑:我创建了一个repository来重现该问题。

1 个答案:

答案 0 :(得分:2)

调用page.merge时引发错误。因为:

  • site.pages已经是pages的特殊群体,用页面集合代替它并不是一个好主意。完成后,您将无法再通过site.page到达原始页面,而只能访问新集合的元素。
  • 在集合项上调用page.merge时,Liquid尝试调用需要自变量而不是在最前面设置的Jekyll::Drop::merge属性的merge方法。

解决方案:不要将页面设置为集合。