我在一个非常小的Go应用程序中有一个函数,它对数据库进行查询,检索一些数据并将其插入模板(main.html)。数据将被插入到模板中(参见图片),但浏览器(Chrome和Firefox)不会解释html。我的浏览器工作正常。是否有一些我用模板做错了?
func Root(w http.ResponseWriter, r *http.Request) {
t := template.Must(template.New("main").ParseFiles("main.html"))
rows, err := db.Query("SELECT title, author, description FROM books")
PanicIf(err)
defer rows.Close()
books := []Book{}
for rows.Next() {
b := Book{}
err := rows.Scan(&b.Title, &b.Author, &b.Description)
PanicIf(err)
books = append(books, b)
}
t.ExecuteTemplate(w, "main.html", books)
}
main.html中
<html>
<head>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<table class="table">
<tr>
<th>Title</th>
<th>Author</th>
<th>Description</th>
</tr>
{{ range . }}
<tr>
<td>{{.Title}}</td>
<td>{{.Author}}</td>
<td>{{.Description}}</td>
</tr>
{{ end }}
</table>
</div>
</body>
</html>
答案 0 :(得分:2)
您很可能正在import "text/template"
并且应该import "html/template"
,但另一个答案也将为您解决。
答案 1 :(得分:1)
您需要设置内容类型,虽然它并不奇怪,但它并没有自动为您设置。
w.Header().Set("Content-Type", "text/html; charset=utf-8")
t.ExecuteTemplate(w, "main.html", books)
//修改
另外,为了正确起见,您应该将<!DOCTYPE html>
添加到模板的顶部,但与问题无关。