You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll疑问:为何文章页无法循环调用同分类文章列表?

嘿,这个问题我之前帮人排查过好几次,核心其实是Jekyll在不同页面类型下的上下文变量差异——不是不能在文章页循环调用文章列表,而是你用的代码没适配文章页的场景~

先给你拆解两个页面的本质区别:

  • 你的categoryB/index.md是分类集合页(属于Jekyll的page类型,不是文章),你在这个页面里直接用site.categories.categoryB,是硬指定了分类名,自然能精准拿到该分类下的所有文章,循环正常运行。
  • 而article.md是单篇文章的布局,此时页面的上下文是当前的单篇文章(page变量指向的就是这篇文章本身),如果循环代码还是硬写死categoryB,就会出现匹配问题,导致循环失效。

下面给你列几个最常见的原因和解决方法:

1. 硬编码分类名,未适配文章的动态分类

如果你在分类页的循环是这种写法:

{% for post in site.categories.categoryB %}
  <li>{{ post.title }}</li>
{% endfor %}

这种硬指定categoryB的方式在分类页没问题,但放到文章页里,只有当前文章刚好属于categoryB时才会生效;如果想让每篇文章页都自动显示自己所属分类的其他文章,得改成动态获取当前文章的分类:

{% assign current_category = page.categories[0] %}
{% for post in site.categories[current_category] %}
  {% if post.url != page.url %} <!-- 排除当前文章本身,避免重复显示 -->
    <li><a href="{{ post.url }}">{{ post.title }}</a></li>
  {% endif %}
{% endfor %}

注意:Jekyll里文章的categories是数组(一篇文章可以属于多个分类),所以用page.categories[0]取第一个分类;如果你的文章只会归属一个分类,这样就完全够用。

2. 分类名的大小写/格式不匹配

Jekyll的分类名是大小写敏感的!比如你文章的front matter里写的是categories: [CategoryB](首字母大写),但循环里写的是site.categories.categoryB(小写),就会找不到对应的分类集合,循环自然为空。

解决方法:要么统一所有分类名的大小写,要么用动态变量(比如上面的current_category)来获取,彻底避免硬编码的拼写错误。

3. 文章的分类字段设置错误

如果某篇文章的front matter里没写categories字段,或者写错成单数category,那page.categories就是空值,循环自然拿不到数据。

检查文章的front matter,确保是复数形式:

---
title: 我的示例文章
categories: [categoryB] # 必须是复数categories,不是单数category
---

最后再划个重点:完全可以在文章页循环调用同分类的文章列表,核心是要适配文章页的上下文,用动态变量获取当前文章的分类,而不是硬写死分类名~

内容的提问来源于stack exchange,提问作者Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:29:38