1

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

在我的帖子(.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>

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

posts,Tag 1,Tag 2

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

如何在单独的“跨度”标签中显示我的帖子上的标签并删除“帖子”标签?

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

谢谢!

4

1 回答 1

4

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

在您使用的起始模板(11ty/eleventy-base-blog)中,该posts/目录包含一个目录数据文件posts.json),该文件也适用于该目录中的所有文件——即所有帖子。由于.eleventy.js 配置文件使用Data Deep Merge 选项,因此您在每个帖子中设置的标签会与posts标签合并。这就是为什么您的帖子的标签是['posts', 'Tag 1', 'Tag 2'].

您可以通过多种方式解决此问题。要么使用两个不同的 frontmatter 字段进行收集和显示,要么posts在显示帖子的标签时过滤掉标签。

如何输出标签列表?

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

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

或者,如果您想将项目包装在 HTML 标记中,您可以使用循环,也可以使用joiner

{% set comma = joiner() %}
{% for tag in tags -%}
  {% if tag !== 'posts' %}
    {{ comma() }} <span class="tag">{{ tag }}</span>
  {% endif %}
{%- endfor %}
于 2021-02-18T15:05:37.350 回答