我需要在模板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页面。执行完成
答案 0 :(得分:2)
浏览器正在呈现页面,因为它是文本。这是因为它没有收到服务器的内容类型。您需要在标题中设置它。
w.Header().Set("Content-Type", "text/html")