在 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
属性 .
解决方案:不要将页面设置为集合。
为了保持清晰,我喜欢将子页面的所有模板文件保存在名为 _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
属性 .
解决方案:不要将页面设置为集合。