2014-07-03 7 views
8

Avendo giocato un po 'con i modelli html di golang, tutti gli esempi che ho trovato per il loop sugli oggetti nei template stavano passando le strutture di slice al template, un po' come in questo esempio:Vai modelli: supera la porzione di strutture anziché la struttura di sezioni

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) 
} 

con il modello dell'essere "principale":

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

Questo funziona, ma non ho ricevuto come dovrei per visualizzare ogni Id proprio accanto al suo corrispondente nome se i sto variando solo nella proprietà .Name. Trovo più logico trattare ogni utente come un oggetto per raggrupparne le proprietà durante la visualizzazione.

Così la mia domanda:

Ora, che cosa se volevo passare una fetta di struct al modello? Quale sarebbe la sintassi per fare in modo che funzioni? Non ho trovato o capito come utilizzare il documento html/template ufficiale. Ho immaginato qualcosa cercando lontanamente simile a questo:

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

e un modello di guardare un po 'come questo: (sintassi qui è volutamente sbagliato, è solo per avere capito)

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

Grazie.

+1

Leggi questo: http://jan.newmarch.name/go/template/chapter-template.html - nello specifico, assegnare uno a una variabile che è possibile chiamare dal all'interno del ciclo gamma. – elithrar

+0

Sembra abbastanza completo sull'argomento, mi assicurerò di leggerlo tutto molto presto. Grazie. –

+0

In effetti, aveva anche la risposta ai problemi che avrei indovinato in seguito. Grazie per questo ottimo link. –

risposta

Problemi correlati