html 语法:
{{range $key 或 索引, $遍历元素}}
HTML 循环元素
{{end}}
go 示例
package main
import (
"net/http"
"text/template"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
template, _ := template.ParseFiles("./templates/index.html")
// 注册多个数据
var data = map[string]any{
"name": "lesscode.work",
"persons": []string{
"小张", "小王", "小李",
},
}
template.Execute(w, data)
})
http.ListenAndServe(":80", nil)
}
html 模板文件示例
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<ul>
{{range $idx, $item := .persons}}
<li>{{$idx}} : {{$item}}</li>
{{end}}
</ul>
</body>
</html>
在上面的示例中我们注册了 2个变量 : name 和 persons ,然后我们在 HTML 模板中对 persons 变量进行遍历,在遍历过程中如果我们需要直接使用 name 变量是无法做到的,如 :
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<ul>
{{range $idx, $item := .persons}}
<li>{{$idx}} : {{$item}} - {{.name}}</li>
{{end}}
</ul>
</body>
</html>
原因是 : . ( 英文点 ) 的作用域在遍历过程中被重置,如何解决呢?
定义一个模板变量可以有效解决上面的变量作用域问题,模板变量定于语法 :
{{$变量名称 := .原变量名称}}
示例 :
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<ul>
{{$name := .name}}
{{range $idx, $item := .persons}}
<li>{{$idx}} : {{$item}} - {{$name}}</li>
{{end}}
</ul>
</body>
</html>