数据文件

除了 Jekyll 提供的 内置变量 之外,你还可以指定自己的自定义数据,这些数据可以通过 Liquid 模板系统 访问。

Jekyll 支持从位于 _data 目录中的 YAMLJSONCSVTSV 文件中加载数据。请注意,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_readertsv_reader 配置选项进行自定义。每个配置键都公开相同的选项

converters:解析文件时应使用哪些 CSV 转换器。可用的选项有 integerfloatnumericdatedate_timeall。默认情况下,此列表为空。 encoding:文件使用的编码。默认为网站 encoding 配置选项。 headers:布尔字段,用于指定是否将文件的首行解析为标题。当 false 时,它将第一行视为数据。默认为 true

示例

csv_reader:
    converters:
      - numeric
      - datetime
    headers: true
    encoding: utf-8
tsv_reader:
    converters:
      - all
    headers: false