J'ai cette structure:
type Site struct {
Name string
Pages []int
}
Je passe une instance de Site
à un modèle .
Si je veux écrire une liste de toutes les pages, je le fais
{{range .Pages}}
<li><a href="{{.}}">{{.}}</a></li>
{{end}}
Maintenant, quelle est la façon la plus simple d'utiliser le champ Name
à l'intérieur de la boucle (par exemple pour changer le href
en Name/page
)?
Notez qu'une solution basée sur le fait que l'objet externe est le global qui a été passé au modèle serait OK.
Vous devez savoir que la variable transmise au modèle est disponible sous la forme $
.
{{range .Pages}}
<li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}
(Voir la documentation text/template sous "Variables".)
Qu'en est-il de:
{{$name := .Name}}
{{range $page := .Pages}}
<li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
Ou tout simplement faire de Pages
une carte avec Nom comme valeur?
type Site struct {
Pages map[string]string
}
{{range $page, $name := .Pages}}
<li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
Il semble qu'il n'y ait pas de solution plus simple que de déclarer explicitement une variable pour l'objet externe (ou ses propriétés):
{{$out := .}}
{{range .Pages}}
<li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}
EDIT: cette réponse n'est plus la bonne, regardez plutôt celle de chowey.