是否可以像 Middleman 一样从 Hugo 中的数据文件自动生成页面?我有一个cars.yml
看起来像这样的 yaml 文件:
---
- name: "Ford"
color: "blue"
- name: "Cadillac"
color: "pink"
并希望根据预定义的模板为数据文件中的每个汽车记录自动生成一个单独的页面。我怎样才能做到这一点?
我写了一个简单的 JS 包装器,它从 Hugo 中的数据生成页面。我目前正在使用它从 YAML 文件生成文章。
根据文档,我通过以下步骤实现了 MVP:
hugo new site carsite
./data/
文件夹,我在cars
那里创建了子文件夹。carsite/data/cars
将每辆车保存为单独的文件。这与您最初将它们放在列表中的计划不同,但每辆车一个文件的方法更好(版本控制、维护、不易出错,因为错误的 .yml 将被单独标记,而不是单一数据文件)。在文件夹内创建内容文件/data/
:
ford.yml
:
Name: "Ford"
Color: "Blue"
和
cadillac.yml
:
Name: "Cadillac"
Color: "Pink"
创建一个部分样式的汽车列表:
carsite/themes/<your theme name>/layouts/partials/car_listing.html
<li>{{ .Name }} in {{ .Color }}</li>
调用循环,或者在 Go 术语中,文件中的范围数据文件,负责您选择的位置。比如让我们输出到主页上,它是由 控制的carsite/themes/<theme name>/layouts/index.html
:
...(existing header.html partial and so on)...
<ul>
{{ range $.Site.Data.cars }}
{{ partial "car_listing.html" . }}
{{ end }}
</ul>
...(existing footer.html partial and so on)...
这是我的外观(代笔模板):
如果您坚持将所有文件包含在一个数据文件中,那也应该可行,只需查询数据文件并对其进行范围。此外,如果您选择yml
格式,请设置数据文件的正确格式顺序(您建议的数据结构看起来很可疑,因为列表直接位于根目录中,而不是添加一个键,例如,cars:
根据上述 YML 规范):
carsite/data/cars.yml
cars:
- Name: Ford
Color: Blue
- Name: Cadillac
Color: Pink