在 Jekyll 中为子页面使用集合会导致 Liquid 异常

Using a collection for sub pages in Jekyll results in Liquid Exception

为了保持清晰,我喜欢将子页面的所有模板文件保存在名为 _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

调用 page.merge 时出现错误。因为:

  • site.pages已经是pages的特殊组了,换成pages集合也不是特别好。完成后,您将无法再通过 site.page 访问原始页面,而只能访问新集合的元素。
  • 当在集合项上调用 page.merge 时,Liquid 会尝试调用需要参数的 Jekyll::Drop::merge 方法,而不是前面设置的 merge 属性 .

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