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