数据文件
除了 Jekyll 提供的 内置变量 之外,你还可以指定自己的自定义数据,这些数据可以通过 Liquid 模板系统 访问。
Jekyll 支持从位于 _data
目录中的 YAML、JSON、CSV 和 TSV 文件中加载数据。请注意,CSV 和 TSV 文件必须包含一个标题行。
此强大功能可让你避免在模板中重复,并在不更改 _config.yml
的情况下设置特定于网站的选项。
插件/主题还可以利用数据文件来设置配置变量。
数据文件夹
你可以将 _data
文件夹用作存储附加数据的地方,以便 Jekyll 在生成你的网站时使用。这些文件必须是 YAML、JSON、TSV 或 CSV 文件(使用 .yml
、.yaml
、.json
、.tsv
或 .csv
扩展名),并且可以通过 site.data
访问。
示例:成员列表
以下是在 Jekyll 模板中避免复制粘贴大量代码块,使用数据文件的基本示例
在 _data/members.yml
中
- name: Eric Mill
github: konklone
- name: Parker Moore
github: parkr
- name: Liu Fengyun
github: liufengyun
或 _data/members.csv
中
name,github
Eric Mill,konklone
Parker Moore,parkr
Liu Fengyun,liufengyun
可以通过 site.data.members
访问此数据(请注意,文件的基本名称决定了变量名称,因此应该避免在同一目录中使用具有相同基本名称但扩展名不同的数据文件)。
你现在可以在模板中呈现成员列表
<ul>
{% for member in site.data.members %}
<li>
<a href="https://github.com/{{ member.github }}">
{{ member.name }}
</a>
</li>
{% endfor %}
</ul>
子文件夹
数据文件也可以放置在 _data
文件夹的子文件夹中。每个文件夹级别都将添加到变量的命名空间中。以下示例显示了如何在 orgs
文件夹下的文件中分别定义 GitHub 组织
在 _data/orgs/jekyll.yml
中
username: jekyll
name: Jekyll
members:
- name: Tom Preston-Werner
github: mojombo
- name: Parker Moore
github: parkr
在 _data/orgs/doeorg.yml
中
username: doeorg
name: Doe Org
members:
- name: John Doe
github: jdoe
然后可以通过 site.data.orgs
访问组织,后跟文件名
<ul>
{% for org_hash in site.data.orgs %}
{% assign org = org_hash[1] %}
<li>
<a href="https://github.com/{{ org.username }}">
{{ org.name }}
</a>
({{ org.members | size }} members)
</li>
{% endfor %}
</ul>
示例:访问特定作者
页面和文章也可以访问特定数据项。以下示例显示了如何访问特定项
_data/people.yml
:
dave:
name: David Smith
twitter: DavidSilvaSmith
然后可以在文章的前端信息中将作者指定为页面变量
---
title: sample post
author: dave
---
{% assign author = site.data.people[page.author] %}
<a rel="author"
href="https://twitter.com/{{ author.twitter }}"
title="{{ author.name }}">
{{ author.name }}
</a>
有关如何为你的网站构建稳健导航的信息(特别是如果你有一个文档网站或其他类型的 Jekyll 网站,其中有很多页面需要组织),请参阅 导航。
CSV/TSV 解析选项
Ruby 解析 CSV 和 TSV 文件的方式可以通过 csv_reader
和 tsv_reader
配置选项进行自定义。每个配置键都公开相同的选项
converters
:解析文件时应使用哪些 CSV 转换器。可用的选项有 integer
、float
、numeric
、date
、date_time
和 all
。默认情况下,此列表为空。 encoding
:文件使用的编码。默认为网站 encoding
配置选项。 headers
:布尔字段,用于指定是否将文件的首行解析为标题。当 false
时,它将第一行视为数据。默认为 true
。
示例
csv_reader:
converters:
- numeric
- datetime
headers: true
encoding: utf-8
tsv_reader:
converters:
- all
headers: false