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

Astro中如何渲染getCollection获取的多份内容条目?

解决变更日志正文纯文本渲染问题

从你描述的getCollection和entry.render()用法来看,假设你使用的是Eleventy,以下是在模板中为每个条目执行render()的具体实现方式:

核心实现思路

在遍历变更日志集合时,对每个条目异步调用entry.render()获取格式化后的HTML内容,再通过模板引擎的安全渲染机制输出,避免内容被转义为纯文本。

Nunjucks模板示例

---
title: 所有变更日志
---

<h1>所有变更日志</h1>

{% for entry in collections.changelogs | sort(true, true, 'data.date') %}
  <section class="changelog-entry">
    <h2>{{ entry.data.date | date('YYYY-MM-DD') }}</h2>
    {% set renderedContent = await entry.render() %}
    {{ renderedContent | safe }}
  </section>
{% endfor %}

JavaScript模板(.11ty.js)示例

module.exports = async function({ collections }) {
  // 按日期倒序排列变更日志
  const sortedChangelogs = collections.changelogs.sort((a, b) => 
    new Date(b.data.date) - new Date(a.data.date)
  );

  let output = `
    <!DOCTYPE html>
    <html>
      <head>
        <title>所有变更日志</title>
      </head>
      <body>
        <h1>所有变更日志</h1>
  `;

  for (const entry of sortedChangelogs) {
    // 调用render()获取HTML内容
    const { content } = await entry.render();
    output += `
      <section class="changelog-entry">
        <h2>${entry.data.date}</h2>
        ${content}
      </section>
    `;
  }

  output += `
      </body>
    </html>
  `;
  return output;
};

关键注意事项

  • 必须使用await调用entry.render():这是异步方法,不等待会导致获取不到正确的HTML内容。
  • 使用safe过滤器(Nunjucks):防止模板引擎自动转义HTML标签,确保正文以富文本形式渲染。
  • 按需排序:通过sort过滤器或数组排序方法,将最新的变更日志放在最上方,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:13