uso tipos raptor programacion loop lenguaje ejemplo comando templates go

templates - tipos - Acceso fuera del valor de bucle dentro del bucle de la plantilla de golang



tipos de loops en programacion (3)

Debe saber que la variable transferida a la plantilla está disponible en $ .

{{range .Pages}} <li><a href="{{.}}">{{$.Name}}</a></li> {{end}}

(Consulte la documentación de text/template en "Variables").

Tengo esta estructura:

type Site struct { Name string Pages []int }

Paso una instancia de Site a una template .

Si quiero escribir una lista de todas las páginas, lo hago

{{range .Pages}} <li><a href="{{.}}">{{.}}</a></li> {{end}}

Ahora, ¿cuál es la forma más sencilla de usar el campo Name dentro del ciclo (por ejemplo, para cambiar el href a Name/page )?

Tenga en cuenta que una solución basada en el hecho de que el objeto externo es el global que se pasó a la plantilla estaría bien.


Parece que no hay una solución más simple que declarar explícitamente una variable para el objeto externo (o sus propiedades):

{{$out := .}} {{range .Pages}} <li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li> {{end}}

EDIT: esta respuesta ya no es la correcta, mira la de chowey en su lugar.


Qué pasa:

{{$name := .Name}} {{range $page := .Pages}} <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li> {{end}}

¿O simplemente hace que Pages un mapa con Name como valor?

type Site struct { Pages map[string]string } {{range $page, $name := .Pages}} <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li> {{end}}