2016-08-09 51 views
0

Ich muss ein struct-Array (Laden von Mysql) innerhalb einer Vorlage HTML darstellen. aber die template.Execute() -Methode schreibt die Antwort als String, nicht als HTML-Seite. kann mir jemand helfen?golang wie man die template.Execute schreiben als HTML-Seite

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:[email protected](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)) 
} 

ich einige einbetten gehen Code in dieser HTML-Dateien:

........ 
<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> 
     ..... 

kann nicht als HTML-Seite laden, nachdem template.Execute

getan

enter image description here

Antwort

2

Der Browser rendert die Seite, wie es ein Text war. Dies liegt daran, dass es vom Server keinen Inhaltstyp empfangen hat. Sie müssen es in der Kopfzeile festlegen.

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

Vielen Dank! Es ist Arbeit. –