go go-templates

¿Cómo pasar múltiples datos a la plantilla Go?



go-templates (2)

Debe definir una estructura rellenada con la consulta de resultados de la base de datos, luego asignar esa estructura al método Execute .

tmpl.Execute requiere una interfaz de Writer y una struct

type Inventory struct { Material string Count uint } items := Inventory{"trouser", 1} if err := GetTemplate("list").Execute(w, items); err != nil { // ... do your work }

Quiero pasar dos objetos de datos a Go Template. Uno es un resultado de consulta MongoDB y otro es una matriz de enteros.

Consulta MongoDB: -

var results []User sess, db := GetDatabase() defer sess.Close() c := db.C("user") err := c.Find(nil).All(&results)

Quiero enviar ''resultado'' y una matriz int a través del siguiente código

GetTemplate("list").Execute(w,???????)

Si solo hay un resultado db, podríamos usarlo como

GetTemplate("list").Execute(w,results)

y en la plantilla podríamos acceder a ella {{.Name}} etc. (donde Nombre es un campo de estructura de [] Usuario)

Por favor, dígame cómo pasar estos datos y cómo acceder a ellos en la plantilla.


Puede ajustar múltiples datos destinados a la plantilla en una struct o en un map .

Ejemplo con una struct :

type Data struct { Results []User // Must be exported! Other []int // Must be exported! } data := &Data{results, []int{1, 2, 3}} if err := GetTemplate("list").Execute(w, data); err != nil { // Handle error }

También tenga en cuenta que no se requiere un nuevo tipo con nombre, también puede usar un literal de estructura anónimo, que podría verse así:

data := struct { Results []User // Must be exported! Other []int // Must be exported! }{results, []int{1, 2, 3}}

Ejemplo con un map :

m := map[string]interface{}{ "Results": results, "Other": []int{1, 2, 3}, } if err := GetTemplate("list").Execute(w, m); err != nil { // Handle error }

Tenga en cuenta que al usar un mapa, no es necesario usar string mayúscula s como teclas, por ejemplo, podría haber usado "results" y "other" también (pero en mi opinión, es mejor usar teclas con letras mayúsculas, si se mueve para struct veces en el futuro, tendría que hacer menos correcciones).

En ambos casos, puede referirse a los resultados del []User con {{.Results}} y al segmento int adicional con {{.Other}} .

Entonces, por ejemplo, para abarcar a los usuarios:

{{range .Results}} User name:{{.Name}} {{end}}