- /
- Skills/
- Hugo 使用指南/
- hugo 中的数据管理/
hugo 中的数据管理
目录
gohugo 是静态网页生成器,它使用数据与网页模板来生成网页文件。gohugo 中使用到的数据分为文章内容页面文件、data中的数据文件、通过数据函数 getJSON
、getCSV
获取到的外部数据。在官方文档中,有关于内容管理、数据模板,但关于数据管理方面的内容分散在几篇文章中、或者就没有数据管理角度的文章,对于熟悉使用带有数据库方式建站的用户来说,这方面的信息其实也比较重要。
gohugo 中使用到的数据 #
gohugo 使用到的数据有页面内容文件,data目录的数据文件,外部的 json、csv 文件。
官方文档 Data Templates 中有关于数据使用的描述。
页面内容 #
页面内容文件,即平时用来保存文章内容的 markdown 文件
---
# front matter
title: "hugo 中的数据管理"
slug: "hugo data management"
date: 2021-05-31T18:22:22+08:00
lastmod: 2021-05-31T18:22:22+08:00
draft: true
---
...正文内容...
上面 正文内容使用 goldmark 来解析,并将保存在 Page.Content
,上面 front matter 中的值,做为参数,一部分以 Page
的属性存在(如 Page.Title
),一部分未在 Page
中定义中,会被保存到 Page.Params.xxx
。(后面时间允许的话,准备写一篇关于 Page
变量的文章)
这些变量值将在模板渲染过程中被使用到。
在这个官方文档 Data Templates 中,并没有关联提及 Page Bundles 、 Page Resources (因为 Page Bundles 、Page Resources 确实已经超过数据管理的范围),其实在 Page Resources 除了包含图片、pdf 等资源文件外,也可以包含经常被用来保存数据的 json 文件。
data 数据目录 #
还记得 gohugo 的目录结构吗?
.
├── archetypes
├── config.toml
├── content
├── data
├── layouts
├── static
└── themes
上面那个 data 目录,是 hugo 的一个标准目录。在 hugo 启动时,会加载这个目录下 yaml、json、toml文件中的数据到内存中。那么,如果在模板渲染过程中需要使用到非文章内容的数据时,就可以将需要的数据以 等格式保存在这个 data 目录。
在模板中,通过使用 site.Data.数据文件名
来引用对应的数据。
数据获取 getXXX
函数 #
前面所述的页面内容、data 数据目录,都是静态的本地数据文件。gohugo 还提供了两个数据获取函数 getJSON
与 getCSV
,分别用来获取内容格式为 json、csv 数据,这些数据被用于模板渲染。虽然这些数据可能是动态的(每一次获取得到的结果可能会变化),但是当获取之后,数据就变成静态的,并渲染固化到网页。
getJSON
与getCSV
仅在 Call the Functions with a URL 中有说明,并没有出现在 Functions Quick Reference 。
使用下面这个格式,在模板中获取指定 url 的数据:
{{ $dataJ := getJSON "url" }}
{{ $dataC := getCSV "separator" "url" }}
另外,这两个函数除了可以获取 互联网 url 的数据外,还可以读取到位于本地文件,不过要求这些文件必须在 hugo 的当前工作目录(非 data 目录)下。
数据的使用模式 #
通过上一节的介绍,hugo 中使用到的数据可以保存在几个地方,同时获取方式也不是唯一的。所以,对于有长期维护网站需求的用户来说,如何才能规范使用又能方便管理? 这个问题并没有标准答案,以下有悟分享本站的建设经验,供大家参考。
- 内容页面 markdown,保存页面级别数据、控制参数等,便于个性化
- Page Resources,尽量少用这个方式来管理数据,除非数据是该页面独有的
- data 目录,保存网站级别数据或者公用的数据,方便管理
getXXX
数据获取函数,只在获取远程数据时使用