2016-05-18 13 views
2

Ich habe 3 Dateien hier in Golang-Projekt, die Idee ist es, die index.html isnside den Körper von layout.html. Es klappt.Variable innerhalb definieren Vorlage in Golang

Aber als ich versuchte, eine Variable in die index.html übergeben, wurde die console.log() nicht gerendert. Wenn ich die console.log() zu layout.html verschiebe, kann ich den Inhalt der JSON von .tes sehen.

Hier sind die Projektdateien.

layout.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>{{.title}} | {{.project_name}}</title> 
</head> 
<body style="width:100%; height: 100%; overflow-x: visible"> 
<div id="wrapper" style="width:100%; height:100%; margin: 0 auto"> 
    {{template "contents"}} 
</div> 
</body> 
</html> 

index.html

{{define "contents"}} 
<script> 
    var x = {{.tes}}; 
    console.log(x) 
</script> 
{{end}} 

router.go

func init() { 
    // handler 
    http.HandleFunc("/", RenderPage) 
} 

func RenderPage(w http.ResponseWriter, r *http.Request) { 
    tes := map[string]interface{}{ 
     "item":"TEST3", 
     "count":4567, 
    } 
    Data := map[string]interface{}{ 
     "title":"TEST1", 
     "project_name":"TEST2", 
     "tes":M.ToJSON(tes), 
    } 
    tmpl, err := template.ParseFiles("page/layout.html", "page/index.html") 
    X.CheckError(err) 
    err = tmpl.Execute(w, Data) 
    X.CheckError(err) 
} 
+0

Überprüfen Sie diese http://stackoverflow.com/questions/19546896/golang-template-how-to-render-templates – CESCO

Antwort

3

In layout.HTML, du ne ed, um den Kontext zu übergeben. Sie tun das mit einem . Punkt.

{{ template "contents" . }} 

Alternativ können Sie den Wert übergeben, was auch immer Sie wollen var:

{{ template "contents" .tes }} 

... und im Inhalt Vorlage, der Punkt Kontext wird nur den Wert von .tes. Dies hilft dabei, den Umfang von Untervorlagen zu begrenzen, ohne dass man dot-walk braucht, um einen Wert zu erhalten.

+1

Vielen Dank für die Antwort eduncan911. Ich finde auch heraus, dass ich 'var x = {{.}};' Anstelle von 'var x = {{.tes}};' verwenden sollte, wenn ich '{{template} contents" .tes}} 'verwende – Tutompita

Verwandte Themen