Übergabe mehrerer Werte zwischen Vorlagen
Beim Go-Templating benötigt die Aktion {{template}} nur ein optionales Argument. Um mehrere Werte zu übergeben, müssen sie in einem einzigen Wert gekapselt werden.
Daten kapseln
Ein Ansatz besteht darin, eine Wrapper-Funktion zu verwenden, die die gewünschten Werte akzeptiert und einen zurückgibt Einzelwert. Beispielsweise könnten wir eine Wrapper-Funktion für unsere Stadt- und Regionsdaten erstellen:
func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} { return map[string]interface{}{ "Shops": shops, "CityName": cityName, "RegionName": regionName, } }
Registrieren der Wrapper-Funktion
Benutzerdefinierte Funktionen können mit Template.Funcs registriert werden (). Dies muss vor dem Parsen der Vorlage erfolgen:
t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{ "Wrap": Wrap, }).Parse(src))
Geänderte Vorlage
Die Vorlage kann dann geändert werden, um die Wrap()-Funktion aufzurufen und das Ergebnis an zu übergeben die {{Vorlage}} Aktion:
{{define "data"}} City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}} {{end}} {{- range . -}} {{$city:=.Name}} {{- range .Regions -}} {{$region:=.Name}} {{- template "data" (Wrap .Shops $city $region) -}} {{end}} {{- end}}
Beispiel
Hier ist ein Beispiel mit den in der Frage bereitgestellten Stadt- und Regionsstrukturen:
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) }
Ausgabe:
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}]
Das obige ist der detaillierte Inhalt vonWie übergebe ich mehrere Werte an die {{template}}-Aktion von Go-Vorlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!