// .go
func Alluser(w http.ResponseWriter, r *http.Request) {
tpl := template.Must(template.ParseFiles("./tpl/alluser.html", "./tpl/base.html" ))
rows, err := db.Query("SELECT username, email FROM users")
if err != nil {
http.Error(w, "did not select * from users", 500)
return
}
defer rows.Close()
for rows.Next() {
data := new(UserList)
err := rows.Scan(&data.Username, &data.Email)
if err != nil {
http.Error(w, http.StatusText(500), 500)
return
}
obj := ListPageData{
Users: []UserList{
{data.Username, data.Email},
},
}
tpl.ExecuteTemplate(w, "base", obj)
}
if err = rows.Err(); err != nil {
http.Error(w, http.StatusText(500), 500)
return
}
}
// base.html - parent
{{define "base"}}
<!doctype html>
<html lang="en">
..
<main role="main" class="base_main container">
{{template "content" .}}
</main>
</body>
</html>
{{end}}
// child.html
{{define "content"}}
<ul class="list-group list-group-flush">
{{range .Users}}
<li class="list-group-item">
name: {{.Username}}, email: {{.Email}}
</li>
{{end}}
</ul>
{{end}}
When using the basic template, the enumeration takes place (<!doctype html>) along with the data ( {{range .Users}} )