©️ OverlookArt
首页 / HUGO / Hugo 模版语法

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 }}

错误日志