web-dev-qa-db-fra.com

Accès hors valeur de boucle à l'intérieur de la boucle du modèle de Golang

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.

47
Denys Séguret

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".)

68
chowey

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

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.

6
Denys Séguret