11ty - 如何在我的 post.njk 文件中显示 post 标签?

11ty - How to display post tags in my post.njk file?

我使用了 11ty/eleventy-base-blog 模板并且运行良好 - 但我试图在我的 post.njk 文件中很好地显示标签。

在我的 post (.md) 文件的顶部我有这个:

tags: ['Tag 1', 'Tag 2']

在 _includes/layouts/postslist.njk 我正在使用以下代码:

{% for tag in post.data.tags %}
  {%- if collections.tagList.indexOf(tag) != -1 -%}
  {% set tagUrl %}/tags/{{ tag }}/{% endset %}
    <span class="tag">{{ tag }}</span>
  {%- endif -%}
{% endfor %}

然后使用此代码在 index.njk 文件(我的主页)中使用此模板:

{% set postslist = collections.posts | head(-3) %}
{% set postslistCounter = collections.posts | length %}
{% include "postslist.njk" %}

这个输出是:

<span class="tag">Tag 1</span>
<span class="tag">Tag 2</span>

但是,如果我在 post.njk 文件中使用 {{ tags }},我会得到以下输出:

posts,Tag 1,Tag 2

我也尝试过使用 'postslist.njk' 文件中的相同代码并将其放入我的 'post.njk' 文件中,但这不起作用。

如何在 post 上以单独的 'span' 标签显示标签并删除 'posts' 标签?

如果您想让我打开我的 git 存储库,请告诉我。

谢谢!

为什么你的标签中有 posts 标签?

在您使用的起始模板中(11ty/eleventy-base-blog), the posts/ directory includes a directory data file (posts.json), which gets applied too all files in that directory – i.e. to all posts. Since the .eleventy.js config file uses the Data Deep Merge option,您在每个 post 中设置的标签与 posts 标签合并。这就是为什么您的 post 是 ['posts', 'Tag 1', 'Tag 2'].

您可以通过多种方式解决这个问题。要么使用两个不同的 frontmatter 字段用于收集和显示目的,要么在显示 post.

的标签时只过滤掉 posts 标签

如何输出标签列表?

如果你只是做 {{ tags }},你就是在告诉 Nunjucks 输出一个数组,所以它必须弄清楚如何将数组转换为字符串。显然,这种情况下的默认行为是简单地用逗号连接它们。您可以更明确地说明这一点(并在逗号后添加 space):

{{ posts | join(', ') }}

或者,如果您想将项目包装在 HTML 标签中,您可以使用循环,可以选择使用 joiner:

{% set comma = joiner() %}
{% for tag in tags -%}
  {% if tag !== 'posts' %}
    {{ comma() }} <span class="tag">{{ tag }}</span>
  {% endif %}
{%- endfor %}