如何使用Jekyll列出文件夹中的所有页面?
在Jekyll中自动生成文件夹内所有页面的头部链接列表
有两种简单的方法可以实现这个需求,核心都是用Jekyll的Liquid模板语法遍历并筛选页面:
方法1:按文件夹路径筛选页面
如果目标页面都集中在同一个文件夹下(比如docs/),可以通过URL路径直接筛选这类页面,生成链接列表:
<nav class="page-nav"> <h4>所有文档页面</h4> <ul> {% assign target_pages = site.pages | where_exp: "item", "item.url contains '/docs/'" | sort: "title" %} {% for item in target_pages %} {% if item.title and item.url != page.url %} <li><a href="{{ item.url | relative_url }}">{{ item.title }}</a></li> {% endif %} {% endfor %} </ul> </nav>
代码说明:
where_exp是Liquid的高级筛选器,精准匹配URL包含目标文件夹路径的页面,比基础where更灵活sort: "title"按页面的title字段排序,也可换成sort: "url"按页面路径排序item.title判断用于过滤无标题的页面(比如默认404页面)item.url != page.url排除当前页面,避免生成指向自身的链接relative_url确保链接在本地预览和线上部署时都能正确跳转
方法2:用前置元数据标记页面
如果目标页面分散在不同文件夹,或者不想依赖路径筛选,可以给每个目标页面的前置元数据(Front Matter)添加自定义标记,比如group: docs:
--- title: "入门指南" group: docs ---
接着用该标记筛选页面并生成链接:
<nav class="page-nav"> <h4>所有文档页面</h4> <ul> {% assign target_pages = site.pages | where: "group", "docs" | sort: "order" %} {% for item in target_pages %} {% if item.title and item.url != page.url %} <li><a href="{{ item.url | relative_url }}">{{ item.title }}</a></li> {% endif %} {% endfor %} </ul> </nav>
代码说明:
where: "group", "docs"筛选所有设置了group: docs的页面- 可额外给页面添加
order字段(比如order: 2),用sort: "order"自定义页面显示顺序 - 这种方法更灵活,适合管理跨文件夹的页面集合
优化提示
- 可以给导航栏添加CSS样式,比如设置横向排列、调整间距,让链接列表更美观
- 若需排除特定页面,可在筛选时增加条件,比如
where_exp: "item", "item.url != '/docs/ignore-this-page/'"
内容的提问来源于stack exchange,提问作者Chiara Ani
相关产品推荐
相关产品推荐

