Eleventy 如何在通用文章模板中添加对应合集的全部内容查看链接
问题原因
你的代码存在两个核心问题导致判断失效:
- 首先在
post.html单篇文章模板的默认上下文中,没有post这个内置变量,Eleventy默认会把当前页面的属性暴露在page变量下,文章的前置元数据(比如标签、分类)是直接作为顶级变量暴露的。 - 其次Nunjucks的
in运算符判断对象是否属于数组时,依赖严格的引用相等,哪怕两个页面对象的内容完全一致,只要不是同一个内存引用就会返回false,所以用post in collections.A这种写法判断当前文章是否属于某个合集本身就不可靠。
修改方案
方案一:通过标签判断(更简单,推荐)
通常Eleventy的合集都是基于标签筛选生成的,如果你给合集A的文章统一加了A标签、合集B的文章统一加了B标签,直接用如下代码即可:
{% if 'A' in tags %} <a href="/a">View all A posts</a> {% elif 'B' in tags %} <a href="/b">View all B posts</a> {% endif %}
方案二:通过URL匹配(适合自定义合集的场景)
如果你是用自定义规则生成的A、B合集,没有绑定统一标签,可以通过匹配当前页面URL的方式判断归属:
{% if collections.A | map(attribute='url') | includes(page.url) %} <a href="/a">View all A posts</a> {% elif collections.B | map(attribute='url') | includes(page.url) %} <a href="/b">View all B posts</a> {% endif %}
这里先用map过滤器提取出合集中所有文章的URL,再用includes判断当前页面的URL是否在列表中,避免了对象引用匹配的问题。
内容的提问来源于stack exchange,提问作者Nick J.
相关产品推荐
相关产品推荐

