У меня есть сайт jekyll с двумя страницами (page1.html
и page2.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 %}
Это на самом деле не отвечает на вопрос, так как это просто вопрос перемещения проблемы на один шаг назад: мне может понадобиться использовать этот параметр в других местах моего кода, а косые черты усложнят это.