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 %}
我使用了 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 %}