按路径搜索 site.pages 中的页面,无需迭代

Searching for page in site.pages by path without iteration

我有一个从 Jekyll 根目录到某个页面的路径作为变量 path。我想从该页面的 FrontMatter 获取一些变量。我如何在不遍历所有页面的情况下在 site.pages 中找到该页面? 我的意思是

{% assign aim = site.pages[path] %}

而不是

{% for p in site.pages %}
  {% if p.path == path %}
    {% assign aim = p %}
  {% endif %}
{% endfor %}

对于具有一千个页面的网站,此解决方案会更快吗?

您可以为此使用 where 液体过滤器:

{% assign aim = site.pages | where:"path",path %}

感谢@β.εηοιτ.βε 的提示!

这是我所期望的,但是当我使用这个模板时,我遇到了问题:{{aim.title}} 的输出是空的。

where 过滤器生成列表,即使它只包含一个元素!但是文件系统中的每个文件路径都指向一个文件,所以我预计 aim 将是页面,而不是列表。为了解决这个问题,我添加了 first 过滤器:

{% assign aim = site.pages | where:"path",path | first %}

现在aim就是我要搜索的页面变量。

关于速度。此解决方案在我的硬件上构建站点的速度提高了 2 倍。