按路径搜索 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 倍。
我有一个从 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 倍。