如何列出 post / 页面中的所有标签

How to list all tags from post / pages

我想用 Jbake 打印与 post/ 页面相关的标签。但是,在阅读了 JBake 文档之后,特别是到目前为止的 Data Model 文档,我知道:

但是,在这些列表中,没有特定于 post / 页面的标签的数据模型。可以打印特定于 post / 页的标签吗?

我正在使用:

经过反复试验,我终于可以列出 post / 页中的所有标签。

数据模型的 JBake 文档只记录了全局数据模型,所以下面列出的模型是供全局使用的,不是我想要的。

  • 所有标签
  • 标签
  • tagged_posts
  • tagged_documents

post / 页面的标签实际上存在于 content 数据模型中。您可以使用 ${content.tags} 访问它,这将列出与您想要的 post / 页面相关的所有标签。

现在,打印它是棘手的部分。因为 content 模型中的 tags 键仅存在于 post / page 模板中。

post / page 模板上打印标签。

post / page 模板下工作时,列出所有 post / 页面标签会更容易。您需要做的是迭代 content.tags.

<#list content.tags as tag>
  ${tag}
</#list>

post / page 模板外打印标签。

这种情况是我需要在html头段生成<meta name="keywords" content="" />的时候。当元关键字在 post / page 模板之外呈现时,我需要特殊处理,例如 index.html.

因为当不在 post / page 模板中时,content 数据模型仅包含两个键:rootpathtype。所以,需要像下面这样的特殊处理:

<#if (content.tags)?? >
  <#-- Make sure we have tags model inside content -->
  <#list content.tags as tag>
    ${tag}<#sep>, </#sep>
  <#else>
    <#-- in case that your page don't have any tags define, print default value if possible -->
  </#list>
<#else>
  <#-- There is no tags model inside content, print default value if possible -->
</#if>