Jekyll/Liquid - 使用导航项目文件生成 (ul, li) 列表并根据页面前端获取项目的属性
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 matter
我正在使用 YAML/Jekyll/Liquid 生成页面,并且我有一个文件 taxonomy.yml,其中包含项目的“类型”(这与类别不同)和项目的属性。
这是一个例子:
fruits:
- apple:
color: red
size: medium
native: true
- grape:
color: green
size: small
native: false
现在我想以两种方式使用这些列表。
- 一种 ul/li 类型的列表,应如下所示:
Types of Fruit
- Apple is red and medium size
- Grape is green and small size
这是我目前所拥有的,但没有输出任何东西:
<ul>
{% for item in site.data.taxonomy.fruits %}
<li>??? is {{ item.color}} and size {{ item.size }}</li>
{% endfor %}
</ul>
- 我想使用给定 post 的“前言”属性 到 'look up' 导航列表中的值,例如
---
title: The Pink Lady
fruit: apple
---
# All about the Pink Lady
Blah blah blah...
然后基于水果(在本例中为苹果)我希望能够放入 post 页面,如下所示:
The Pink Lady
This article is about a medium fruit.
All about the Pink Lady
Blah blah blah...
为此,我必须前往 taxonomy.yml,并根据“水果”列表查找“苹果”(从前面的内容),然后读取“大小”属性(在这种情况下为介质)打印到 post.
(假设值是唯一的,所以文件中只有一个 'apple',并且它总是指定一个 'size')
这是我的:
<h1>{{ page.title }}</h1>
<p>This article is about a {{ site.data.taxonomy.fruits[page.fruit].size }} fruit.</p>
我想我一定是没能理解有关使用层次结构的一些细节,因为我相信这个想法基本上已经存在,但缺少一些细节......请帮忙!
我想我的误解可能在某种程度上与“列表项”和“键值对”之间的区别有关。我理解抽象的那些,但很难在这里应用它们。
您可能在此处误用了 YAML 序列。您的 YAML:
fruits:
- apple:
color: red
size: medium
native: true
- grape:
color: green
size: small
native: false
表示fruits
是一个列表,其中每个列表项都是一个具有单个键值对的映射;键是 apple
或 grape
,值是包含它们属性的映射。您可能想要执行以下任一操作:
选项 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>
我正在使用 YAML/Jekyll/Liquid 生成页面,并且我有一个文件 taxonomy.yml,其中包含项目的“类型”(这与类别不同)和项目的属性。
这是一个例子:
fruits:
- apple:
color: red
size: medium
native: true
- grape:
color: green
size: small
native: false
现在我想以两种方式使用这些列表。
- 一种 ul/li 类型的列表,应如下所示:
Types of Fruit
- Apple is red and medium size
- Grape is green and small size
这是我目前所拥有的,但没有输出任何东西:
<ul>
{% for item in site.data.taxonomy.fruits %}
<li>??? is {{ item.color}} and size {{ item.size }}</li>
{% endfor %}
</ul>
- 我想使用给定 post 的“前言”属性 到 'look up' 导航列表中的值,例如
---
title: The Pink Lady
fruit: apple
---
# All about the Pink Lady
Blah blah blah...
然后基于水果(在本例中为苹果)我希望能够放入 post 页面,如下所示:
The Pink Lady
This article is about a medium fruit.
All about the Pink Lady
Blah blah blah...
为此,我必须前往 taxonomy.yml,并根据“水果”列表查找“苹果”(从前面的内容),然后读取“大小”属性(在这种情况下为介质)打印到 post.
(假设值是唯一的,所以文件中只有一个 'apple',并且它总是指定一个 'size')
这是我的:
<h1>{{ page.title }}</h1>
<p>This article is about a {{ site.data.taxonomy.fruits[page.fruit].size }} fruit.</p>
我想我一定是没能理解有关使用层次结构的一些细节,因为我相信这个想法基本上已经存在,但缺少一些细节......请帮忙!
我想我的误解可能在某种程度上与“列表项”和“键值对”之间的区别有关。我理解抽象的那些,但很难在这里应用它们。
您可能在此处误用了 YAML 序列。您的 YAML:
fruits:
- apple:
color: red
size: medium
native: true
- grape:
color: green
size: small
native: false
表示fruits
是一个列表,其中每个列表项都是一个具有单个键值对的映射;键是 apple
或 grape
,值是包含它们属性的映射。您可能想要执行以下任一操作:
选项 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>