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

Jekyll评论无法正常显示问题排查求助

为什么Jekyll无法正确显示评论内容?

嘿,我瞅你这Jekyll评论渲染的问题,一眼就看到Liquid遍历的地方出毛病了!咱们来一步步给你捋清楚怎么修~

我的问题场景

我编写了一段Liquid代码,本应把存储在data/comments/postid/commentid.yml中的评论转换成HTML,但实际输出的所有评论字段(名称、邮箱、内容、日期)都是空值,只有模板结构。

我写的Liquid代码

{% for comment in site.data.comments | where: "slug", page.slug %}
<div class="comment">
  <div class="meta">
    <p class="name">
      {% if comment.email %}
      <img src="https://www.gravatar.com/avatar/{{ comment.email }}?d=mm&s=60" alt="{{ comment.name| escape }}">
      {% else %}
      <img src="/blog/lib/img/avatar.jpg" alt="{{ comment.name | escape }}">
      {% endif %}
      Od: {{ comment.name | strip_html }} * {{ comment.date | date: "%b %-d, %Y, %H:%M" }}
    </p>
  </div>
  <p class="message">{{ comment.message | strip_html | markdownify | smartify }}</p>
</div>
{% endfor %}

实际输出的HTML

<div class="comment">
  <div class="meta">
    <p class="name">
      <img src="/blog/lib/img/avatar.jpg" alt="">
      Od: * 
    </p>
  </div>
  <p class="message"></p>
</div>

YAML评论示例(data/comments/postid/commentid.yml)

_id: a39a2830-4ab0-11ea-a10f-77385622cc26
name: Igor Kowalczyk
email: 28a451314d9295e9bcce66c293bd20ed
message: Testowy Komentarz
date: '2020-02-08T20:21:51.037Z'

问题根源与修复方案

1. 核心问题:Liquid遍历语法错误

你用的{% for comment in site.data.comments | where: "slug", page.slug %}完全不对!因为site.data.comments是一个哈希对象(不是数组),它的结构是:

site.data.comments
├─ postid1(你的page.slug)
│  ├─ commentid1.yml
│  └─ commentid2.yml
└─ postid2
   └─ commentid3.yml

where过滤器只能用于数组,没法直接筛选这种嵌套的哈希结构。

2. 修复后的代码

直接根据page.slug定位到对应帖子的评论文件夹,再遍历里面的所有评论文件:

{% assign post_comments = site.data.comments[page.slug] %}
{% if post_comments %}
  {% for comment in post_comments %}
    {% assign comment_data = comment[1] %}
    <div class="comment">
      <div class="meta">
        <p class="name">
          {% if comment_data.email %}
            <img src="https://www.gravatar.com/avatar/{{ comment_data.email }}?d=mm&s=60" alt="{{ comment_data.name | escape }}">
          {% else %}
            <img src="/blog/lib/img/avatar.jpg" alt="{{ comment_data.name | escape }}">
          {% endif %}
          Od: {{ comment_data.name | strip_html }} * {{ comment_data.date | date: "%b %-d, %Y, %H:%M" }}
        </p>
      </div>
      <p class="message">{{ comment_data.message | strip_html | markdownify | smartify }}</p>
    </div>
  {% endfor %}
{% endif %}

3. 关键修复点解释

  • {% assign post_comments = site.data.comments[page.slug] %}:直接获取当前页面slug对应的评论文件夹下的所有评论文件
  • {% for comment in post_comments %}:遍历该文件夹下的所有评论,每个comment是一个键值对(键是评论文件名,值是YAML里的评论数据)
  • {% assign comment_data = comment[1] %}:取出键值对里的实际评论数据(comment[0]是文件名,comment[1]才是你要的内容)

4. 额外检查项

  • 确保page.slug的值和你的评论文件夹名完全匹配(Jekyll对文件名大小写、空格都敏感)
  • 检查YAML文件的缩进:必须用空格,不能用Tab,否则Jekyll会解析失败

内容的提问来源于stack exchange,提问作者Majonez.exe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:17:34