Maison > développement back-end > Golang > Comment transmettre plusieurs valeurs à l'action {{template}} des modèles Go ?

Comment transmettre plusieurs valeurs à l'action {{template}} des modèles Go ?

Mary-Kate Olsen
Libérer: 2024-12-05 20:38:13
original
816 Les gens l'ont consulté

How to Pass Multiple Values to Go Templates' {{template}} Action?

Passer plusieurs valeurs entre les modèles

Dans les modèles Go, l'action {{template}} ne prend qu'un seul argument facultatif. Pour transmettre plusieurs valeurs, elles doivent être encapsulées dans une seule valeur.

Encapsulation des données

Une approche consiste à utiliser une fonction wrapper qui accepte les valeurs souhaitées et renvoie un valeur unique. Par exemple, nous pourrions créer une fonction wrapper pour nos données de ville et de région :

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}
Copier après la connexion

Enregistrement de la fonction Wrapper

Les fonctions personnalisées peuvent être enregistrées à l'aide de Template.Funcs (). Cela doit être fait avant d'analyser le modèle :

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))
Copier après la connexion

Modèle modifié

Le modèle peut ensuite être modifié pour appeler la fonction Wrap() et transmettre le résultat à le {{modèle}} action :

{{define "data"}}
    City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}}
{{end}}
{{- range . -}}
        {{$city:=.Name}}
        {{- range .Regions -}}
              {{$region:=.Name}}
              {{- template "data" (Wrap .Shops $city $region) -}}
        {{end}}
{{- end}}
Copier après la connexion

Exemple

Voici un exemple utilisant les structures Ville et Région fournies dans la question :

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))
CityWithSomeData := []City{
    {
        Name: "CityA",
        Regions: []Region{
            {Name: "CA-RA", Shops: []Destination{{"CA-RA-SA"}, {"CA-RA-SB"}}},
            {Name: "CA-RB", Shops: []Destination{{"CA-RB-SA"}, {"CA-RB-SB"}}},
        },
    },
    {
        Name: "CityB",
        Regions: []Region{
            {Name: "CB-RA", Shops: []Destination{{"CB-RA-SA"}, {"CB-RA-SB"}}},
            {Name: "CB-RB", Shops: []Destination{{"CB-RB-SA"}, {"CB-RB-SB"}}},
        },
    },
}
if err := t.ExecuteTemplate(os.Stdout, "cities.gohtml", CityWithSomeData); err != nil {
    panic(err)
}
Copier après la connexion

Sortie :

City: CityA, Region: CA-RA, Shops: [{CA-RA-SA} {CA-RA-SB}]
City: CityA, Region: CA-RB, Shops: [{CA-RB-SA} {CA-RB-SB}]
City: CityB, Region: CB-RA, Shops: [{CB-RA-SA} {CB-RA-SB}]
City: CityB, Region: CB-RB, Shops: [{CB-RB-SA} {CB-RB-SB}]
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal