2014-07-03 79 views
8

在golang的html模板中玩了一下,我發現循環遍歷模板中的對象的所有例子都是將結構片傳遞給模板,就像這樣例如:Go模板:範圍覆蓋結構片而不是結構片

type UserList struct { 
    Id []int 
    Name []string 
} 

var templates = template.Must(template.ParseFiles("main.html")) 

func rootHandler(w http.ResponseWriter, r *http.Request) { 
    users := UserList{ 
     Id: []int{0, 1, 2, 3, 4, 5, 6, 7}, 
     Name: []string{"user0", "user1", "user2", "user3", "user4"}, 
    } 
    templates.ExecuteTemplate(w, "main", &users) 
} 

與「主」樣板是:

{{define "main"}} 
    {{range .Name}} 
     {{.}} 
    {{end}} 
{{end}} 

這工作,但我不明白我也應該顯示每個ID毗鄰其相應的名稱,如果我僅限於.Name屬性。我覺得將每個用戶作爲一個對象來顯示時將其屬性分組是更合理的。

因此我的問題:

現在,如果我想結構的切片傳遞到模板什麼?使這項工作的語法是什麼?我還沒有找到或理解如何在官方的HTML /模板文檔。 我想象的東西遠程看起來像這樣:

type User struct { 
    Id int 
    Name string 
} 
type UserList []User 
var myuserlist UserList = ... 

,有點期待這樣的一個模板:(語法這裏是故意錯,它只是得到理解)

{{define "main"}} 
    {{for each User from myuserlist as myuser}} 
     {{myuser.Id}} 
     {{myuser.Name}} 
    {{end}} 
{{end}} 

感謝。

+1

閱讀:http://jan.newmarch.name/go/template/chapter-template.html - 具體而言,分配一個,你可以從範圍循環內調用的變量。 – elithrar

+0

這個問題似乎很完整,我一定會很快閱讀所有內容。謝謝。 –

+0

事實上,它甚至可以解決我後來遇到的問題。感謝這個偉大的鏈接。 –

回答