Hugo 模版语法
Hugo 中的模版是添加了变量和函数的 HTML 文件
在双大括号{{ }}
内访问变量及调用函数
Hugo 的相关数据
1// 生成 hugo 版本的 <meta> 标签
2{{printf "%#v" hugo.Generator}}
3// 获取 hugo 的版本号
4{{ printf "%#v" hugo.Version }}
5// 获取构建 hugo 的 go语言的版本号
6{{ printf "%#v" hugo.GoVersion }}
7// 获取 hugo 当前运行环境
8{{ printf "%#v" hugo.Environment }}
9// 获取 hugo 二进制的 git 提交哈希值
10{{ printf "%#v" hugo.CommitHash }}
11// 获取 hugo 二进制的编译时间
12{{ printf "%#v" hugo.BuildDate }}
13// hugo 是否是扩展版本
14{{ printf "%#v" hugo.IsExtended }}
15// hugo 运行的是否是生产环境
16{{ printf "%#v" hugo.IsProduction }}
17// 获取 hugo 项目的依赖项列表(hugo模块或本地主题组件)
18{{ printf "%#v" hugo.Deps }}
19// 获取 依赖性模块的信息
20{{range $index, $element := hugo.Deps }}
21 // 模块的路径
22 {{ printf "<path:%#v>" $element.Path $index }}
23 // 模块的版本号
24 {{ printf "<Version:%#v>" $element.Version }}
25 // 模块是否被供应
26 {{ printf "<Vendor:%#v>" $element.Vendor }}
27 // 模块的创建时间
28 {{ printf "<Time:%#v>" $element.Time }}
29 // 模块的引用者
30 {{ printf "<Owner:%#v>" $element.Owner }}
31{{end}}
基础数据
创建一个整数
1// 通过字面量创建
2{{ $int := 123 }}
3// 通过参数创建
4{{ $int := int "123" }}
5{{ $int }}
6// 输出结果: 123
创建一个浮点数
1// 通过字面量创建
2{{ $float := 1.32 }}
3// 通过参数创建
4{{ $float := float "1.32"}}
5{{ $float }}
6// 输出结果: 1.32
数学运算符
加减乘除取余取整
1// 加
2{{ add 1 2 }} //结果: 3
3{{ add 1.1 2 }} //结果: 3.1
4//减
5{{ sub 3 2 }} //结果: 1
6{{ sub 3 2.5}} //结果 0.5
7//乘
8{{ mul 2 3 }} //结果: 6
9{{ mul 2 3.1}} //结果: 6.2
10//除
11{{ div 6 3 }} //结果: 2
12{{ div 6 4 }} //结果: 1
13{{ div 6 4.0}} //结果: 1.5
14//取余
15{{ mod 15 3 }} //结果: 0
16//是否能整除
17{{ modBool 15 3 }} //结果: true
18//向下取整
19{{ math.Ceil 2.1 }} //结果: 3
20//向上取整
21{{ math.Floor 1.9 }} //结果: 1
22// 四舍五入取整
23{{ math.Round 1.5 }} //结果: 2
其他数学运算
1// 自然对数
2{{ math.Log 42 }} //结果: 3.737
3// 最大值
4{{ math.Max 1 2 }} //结果: 2
5// 最小值
6{{ math.Min 1 2 }} //结果: 1
7// 幂运算
8{{ math.Pow 2 3 }} //结果: 8
9// 平方根运算
10{{ math.Sqrt 81 }} //结果: 9
字符串
创建一个字符串
1// 通过字面创建
2{{ $str := "String" }}
3// 通过 string 函数创建
4{{ $str := string "String" }}
5{{ printf "%#v" $str }}
6// 打印结果: "String"
字符串拼接
1// 字符串拼接
2{{ $str1 := "Hello" }}
3{{ $str2 := "World" }}
4{{ $str3 := printf "%s %s" $str1 $str2 }}
5{{ printf "%#v" $str3 }}
6// 打印结果: "Hello World"
字符串的长度
1{{ strings.RuneCount $str }}
2// 显示结果: 6
字符串替换
1{{ $str1 := "Hello World" }}
2{{ $str2 := replace $str1 "l" "o" }}
3{{ printf "%#v" $str2 }}
4// 打印结果: "Heooo Worod"
大小写转化
1// 转化为小写
2{{ lower $str }}
3// 显示结果: string
4// 转化为大写
5{{ upper $str }}
6// 显示结果: STRING
数组
创建一个数组
1{{ $array := slice "item1" "item2" "item3" }}
2{{ printf "%#v" $array }}
获取数组的长度
1{{ $array := slice "1" "2" "3" }}
2{{ printf "%#v" len $array }}
3// 打印结果: 3
为一个数组添加元素
1{{ $array := slice "1" "2" "3" }}
2{{ $n := $array | append "4" "5" }}
3{{ printf "%#v" $n }}
4// 打印结果: ["1","2","3","4","5"]
5
6// 添加一个数组
7{{ $n := $n | append (slice "6" "7") }}
8{{ printf "%#v" $n }}
9// 打印结果: ["1","2","3","4","5","6","7"]
数组中是否存在某个元素
1{{ $array := slice "item1" "item2" "item3" }}
2{{ in $array "item4" }}
3// 输出结果: false
通过下标取数组的元素
1{{ $array := slice "item1" "item2" "item3" }}
2{{ index $array 1 }}
3// 输出结果: item2
取一个数组的前几项
1{{ $array := slice "item1" "item2" "item3" }}
2// 从数组中取前2项元素,并组成新数组
3{{ $first := first 2 $array }}
4{{ $first }}
5// 打印结果: [item1 item2]
取一个数组的后几项
1{{ $array := slice "item1" "item2" "item3" }}
2// 2 是下标 从下标往后取 并组成新的数组
3{{ $after := after 2 $array }}
4{{ $after }}
5// 打印结果: [item3]
合并两个数组
1{{ $array1 := slice "item1" "item2" "item3" }}
2{{ $array2 := slice "item1" "A" "item3" }}
3// 将两个数组的相同元素作为新数组, 顺序与第一个数组相同
4{{ intersect $array1 $array2 }}
5// 输出结果: [item1 item3]
遍历 Array, Map
1// $index 绑定下标
2// $item 绑定元素
3{{range $index, $item := $array }}
4 {{ printf "<index:%#v item:%#v>" $index $item }}
5{{end}}
6
7//遍历前几个元素
8{{ range first 3 $array }} {{ end }}
9
10//遍历后几个元素
11{{ range after 3 $array }} {{ end }}
字典
创建一个字典
1{{ $dic := dict "key" "value" }}
2{{ printf "%#v" $dic }}
3// 打印结果: {"key":"value"}
获取字典的长度
1{{ $dic := dict "key1" "value1" "key2" "value2" "key3" "value3" }}
2{{ printf "%#v" $dic.Len }}
3// 打印结果: 3
添加新的键值对
1{{ $myDict := dict "key1" "value1" "key2" "value2" }}
2{{ $myDict = $myDict | merge (dict "key3" "value3") }}
通过 key 取 value
1{{ $dic := dict "key" "value" }}
2{{ $dic.key }}
3// 或者
4{{ index $dic "key" }}
5// 输出结果: value
将字典转为JSON
1{{ $dic := dict "key" "value" }}
2{{ jsonify $dic}}
3// 输出结果: {"key":"value"}
时间日期
1//当前时间
2{{ now }} //输出结果: 2023-03-02 22:47:34.87907 +0800 CST m=+7.329132085
3
4//格式化时间 2006-01-02 15:04:05 是什么特殊的日子
5{{ now.Format "2006-01-02 15:04:05" }} //输出结果: 2023-03-02 23:00:39
6
7// 字符串创建时间
8{{ time.AsTime "2006-01-02" }} //输出结果: 2006-01-02 00:00:00 +0000 UTC
9
10// 日期运算
11//加一天
12{{ $date := "2006-01-02" | time.AsTime }}
13{{ $date.AddDate 0 0 1 | time.Format "2006-01-02"}} //输出结果: 2006-01-03
14//加三月
15{{ $date.AddDate 0 3 0 | time.Format "2006-01-02"}} //输入结果: 2006-04-02
16//减十年
17{{ $date.AddDate -10 0 0 | time.Format "2006-01-02"}} //输出结果: 1996-01-02
数据嵌套
流程控制
条件判断
1// 如果 val1 与 val2 相等, 则...
2{{ if eq val1 val2 }}
3// 如果 val1 与 val2 不相等, 则...
4{{ if ne val1 val2 }}
5// 如果 val1 大于等于 val2, 则...
6{{ if ge val1 val2 }}
7// 如果 val1 大于 val2, 则...
8{{ if gt val1 val2 }}
9// 如果 val1 小于等于 val2, 则...
10{{ if le val1 val2 }}
11// 如果 val1 小于 val2, 则...
12{{ if lt val1 val2 }}
13
14{{ end }}