Golang html/template
使用range
語法遍歷集合資料物件到HTML的table的row。
事前要求
參考「Golang template range用法」了解template的range
的基本用法。
範例
在專案main.go
所在目錄新增一個template
文字檔內容如下,為模板來源。
template
<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
border: solid 1px #888;
padding: 8px;
}
th {
color: #eee;
background: #111;
}
table {
border-collapse:collapse;
}
tr:nth-child(even) {
background: #eee;
}
tr:hover {
background: #ddd;
}
</style>
</head>
<body>
<h1>{{.Name}}</h1>
<table>
<thead>
<tr>
<th>編號</th>
<th>名稱</th>
<th>年齡</th>
</tr>
</thead>
<tbody>
{{range .Employees}}
<tr>
<td>{{.Id}}</td>
<td>{{.Name}}</td>
<td>{{.Age}}</td>
</tr>
{{end}}
</tbody>
</table>
</body>
</html>
下面利用go:embed
讀取template
檔案的內容到變數htmlTemplate
。
使用html/template
解析模板並將資料物件套入到模板中,將結果輸出到main
所在目錄下的result.html
。
main.go
package main
import (
"bytes"
_ "embed"
"html/template"
"os"
)
type Table struct {
Name string
Employees []Employee
}
type Employee struct {
Id string
Name string
Age int
}
//go:embed template
var htmlTemplate string
func main() {
t := template.Must(template.New("htmlTemplate").Parse(htmlTemplate))
employees := []Employee{
{"1", "John", 33},
{"2", "Mary", 28},
{"3", "Tony", 44},
{"4", "Bill", 22},
}
data := Table{
Name: "Employee List",
Employees: employees,
}
buf := new(bytes.Buffer)
err := t.Execute(buf, data)
if err != nil {
panic(err)
}
os.WriteFile("result.html", buf.Bytes(), 0666)
}
測試
程式執行後的輸出的result.html
內容如下:
result.html
<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
border: solid 1px #888;
padding: 8px;
}
th {
color: #eee;
background: #111;
}
table {
border-collapse:collapse;
}
tr:nth-child(even) {
background: #eee;
}
tr:hover {
background: #ddd;
}
</style>
</head>
<body>
<h1>Employee List</h1>
<table>
<thead>
<tr>
<th>編號</th>
<th>名稱</th>
<th>年齡</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>John</td>
<td>33</td>
</tr>
<tr>
<td>2</td>
<td>Mary</td>
<td>28</td>
</tr>
<tr>
<td>3</td>
<td>Tony</td>
<td>44</td>
</tr>
<tr>
<td>4</td>
<td>Bill</td>
<td>22</td>
</tr>
</tbody>
</table>
</body>
</html>
沒有留言:
張貼留言