页面上的液体过滤阵列 属性

Liquid filtering array over a page property

我有一个有两个页面的 jekyll 站点(page1.htmlpage2.html),它们都使用相同的布局。此布局打印有关给定子目录中某些其他页面的一些信息。例如

{% for p in site.pages %}
    {{ p.title }}
{% endfor %}
---
layout: test
---
this page lists the title of my books...

这将打印我站点中每个页面的标题,但我希望它仅打印子目录 /books 中页面的标题,因此我会将布局页面更改为

{% for p in site.pages | where: 'dir','/books/' %}
    {{ p.title }}
{% endfor %}

这很好用,但我希望另一个页面使用相同的布局并列出我的漫画内容(在 /comics 文件夹中)而不是我的书,所以我会更改结构我的网站采用以下方式:

{% for p in site.pages | where: 'dir','/{{ page.directory_to_scan }}/' %}
    {{ p.title }}
{% endfor %}
---
layout: test
directory_to_scan: books
---
this page lists the title of my books...
---
layout: test
directory_to_scan: comics
---
this page lists the title of my comics...

但是这不起作用,根本没有打印任何标题。

您不能混合使用标签和过滤器(assign 除外)。此外,无需将变量括在双括号内的 filter 中:

---
directory_to_scan: '/comics/'
---

布局将使用:

{% assign my_pages = site.pages | where: 'dir', page.directory_to_scan %}
{% for p in my_pages %}
  {{ p.title }}
{% endfor %}

所以,我最终通过在循环之前组装字符串,使用 append 过滤器解决了问题。

{% assign d = '/' | append: page.directory_to_scan | append: '/' %}
{% for p in site.pages | where: 'dir',d %}
    {{ p.title }}
{% endfor %}