浏览器不解释html模板

时间:2014-08-14 16:46:29

标签: html go

我在一个非常小的Go应用程序中有一个函数,它对数据库进行查询,检索一些数据并将其插入模板(main.html)。数据将被插入到模板中(参见图片),但浏览器(Chrome和Firefox)enter image description here不会解释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>

2 个答案:

答案 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>添加到模板的顶部,但与问题无关。