【问题标题】:Jekyll/Liquid - Use a file of navigation items to generate a (ul, li) list and to get properties of the items based on page front matterJekyll/Liquid - 使用导航项目文件生成 (ul, li) 列表并根据页面前端获取项目的属性
【发布时间】:2021-05-12 10:37:51
【问题描述】:

我正在使用 YAML/Jekyll/Liquid 生成页面,并且我有一个文件 taxonomy.yml,其中包含项目的“类型”(这与类别不同)和项目的属性。

这是一个例子:

fruits:
- apple:
    color: red
    size: medium
    native: true
- grape:
    color: green
    size: small
    native: false

现在我想以两种方式使用这些列表。

  1. ul/li 类型的列表,应如下所示:

水果的种类

  • 苹果是红色中等大小
  • 葡萄是绿色大小

这是我目前所拥有的,但没有输出任何东西:

<ul>
{% for item in site.data.taxonomy.fruits %}
<li>??? is {{ item.color}} and size {{ item.size }}</li>
{% endfor %}
</ul>
  1. 我想使用给定帖子的“front matter”属性从导航列表中“查找”一个值,例如
---
title: The Pink Lady
fruit: apple
---

# All about the Pink Lady

Blah blah blah...

然后基于水果(在本例中为苹果)我希望能够放入帖子页面,如下所示:

粉红女郎

这篇文章是关于一种中等水果的。

关于粉红女郎的一切

呜呜呜……

为此,我必须转到 taxonomy.yml,并在“水果”列表中查找“苹果”(从前面的内容),然后读取“大小”属性(在这种情况下为中等) ) 打印到帖子中。

(假设值是唯一的,因此文件中只有一个“苹果”,并且始终指定“大小”)

这就是我所拥有的:

<h1>{{ page.title }}</h1>

<p>This article is about a {{ site.data.taxonomy.fruits[page.fruit].size }} fruit.</p>

我想我一定没有理解有关使用层次结构的一些细节,因为我相信这个想法基本上就在那里,但缺乏一些细节......请帮忙!

我认为我的误解可能在某种程度上与“列表项”和“键值对”之间的区别有关。我理解那些抽象的,但在这里很难应用它们。

【问题讨论】:

    标签: yaml jekyll liquid


    【解决方案1】:

    您可能在这里误用了 YAML 序列。你的 YAML:

    fruits:
    - apple:
        color: red
        size: medium
        native: true
    - grape:
        color: green
        size: small
        native: false
    

    表示fruits 是一个列表,其中每个列表项是一个具有单个键值对的映射;键是applegrape,值是包含它们属性的映射。您可能想要执行以下任一操作:

    选项 1:不要使用序列。

    fruits:
      apple:
        color: red
        size: medium
        native: true
      grape:
        color: green
        size: small
        native: false
    

    然后您可以遍历映射,其中item 将是键和值的元组:

    <ul>
    {% for item in site.data.taxonomy.fruits %}
    <li>{{item[0]}} is {{item[1].color}} and size {{item[1].size }}</li>
    {% endfor %}
    </ul>
    

    选项 2:在属性中集成名称

    也许您确实希望 fruits 成为一个序列。那么你可能应该将名称合并到属性列表中,如下所示:

    fruits:
    - name: apple
      color: red
      size: medium
      native: true
    - name: grape
      color: green
      size: small
      native: false
    

    现在您可以遍历序列,item 将直接包含属性列表:

    <ul>
    {% for item in site.data.taxonomy.fruits %}
    <li>{{item.name}} is {{ item.color}} and size {{ item.size }}</li>
    {% endfor %}
    </ul>
    

    是的,但如果我真的很想保留原始 YAML 怎么办

    <ul>
    {% for item in site.data.taxonomy.fruits %}
    {% for kvpair in item %}
    <li>{{kvpair[0]}} is {{kvpair[1].color}} and size {{kvpair[1].size }}</li>
    {% endfor %}
    {% endfor %}
    </ul>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-18
      • 2017-08-02
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多