golang如何让模板。执行写为HTML页面

时间:2016-08-09 11:02:55

标签: go

我需要在模板HTML中表示一个struct数组(从Mysql加载)。但是template.Execute()方法将响应写为字符串,而不是表示为HTML页面。 有人能帮我吗 ?

import (
    "fmt"
    "log"
    "time"
    "net/http"
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    s "strings"
    "html/template"
    "io/ioutil"
)
var p = fmt.Println

type ListData struct{
    Id int
    Os sql.NullString
    Title string
} 

func searchHandler(w http.ResponseWriter, r *http.Request) {
    db,er := sql.Open("mysql","root:11b@tcp(localhost:3306)/collection")
    cursor := []ListData{}
    for rows.Next() {
        //load data here....
    }
    t, pErr := template.ParseFiles("./admin/list.html")
    if pErr != nil {
        panic(pErr)
    }
    pErr = t.Execute(w, cursor)
    if pErr != nil {
        http.Error(w, pErr.Error(), http.StatusInternalServerError)
        return
    }
}//end of searchHandler

func main(){
    p("start servlet.")
    //other handlers
    http.HandleFunc("/search", searchHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

我在这个HTML文件中嵌入了很少的代码:

........
<thead>
   <tr>
       <th>id</th>
       <th>os</th>
       <th>title</th>
   </tr>
</thead>
       <tbody>
             {{range .}}
               <tr class="success">
                <td>{{.Id}}</td>
                <td>{{.Os}}</td>
                <td>{{.Title}}</td>
               </tr>
             {{end}}
       </tbody>
      .....

无法在模板后加载为HTML页面。执行完成

enter image description here

1 个答案:

答案 0 :(得分:2)

浏览器正在呈现页面,因为它是文本。这是因为它没有收到服务器的内容类型。您需要在标题中设置它。

w.Header().Set("Content-Type", "text/html")