Mehrere Werte von Vorlage zu Vorlage übergeben
Beim Go-Templating ist es möglich, einen Datenwert an eine verschachtelte Vorlage zu übergeben, indem die {{ template}}-Aktion. Diese Aktion akzeptiert jedoch nur einen einzelnen Datenwert als Eingabe. Wenn mehrere Datenentitäten an eine verschachtelte Vorlage übergeben werden müssen, ist eine Lösung erforderlich.
Benutzerdefinierte Funktionen für die Datenverpackung
Das Vorlagensystem von Go ermöglicht die Registrierung benutzerdefinierter Funktionen mithilfe von Template.Funcs()-Methode. Diese Funktionen können Operationen an den Daten ausführen, bevor sie an die Vorlage übergeben werden, was eine Datenmanipulation und -paketierung ermöglicht.
Für den Fall, dass mehrere Werte an eine Vorlage übergeben werden müssen, kann eine benutzerdefinierte Funktion zum Umschließen erstellt werden diese Werte in eine einzige Entität, z. B. eine Karte oder Struktur. Diese verpackte Entität kann dann an die Aktion {{template}} übergeben werden.
Vorlagenänderung
Sobald die benutzerdefinierte Funktion definiert ist, kann die Vorlage zum Aufrufen geändert werden Führen Sie diese Funktion aus und übergeben Sie die umschlossene Datenentität an die verschachtelte Vorlage. Die Syntax hierfür lautet:
{{template "templateName" (customFunctionName data1 data2)}}
Beispiel
Berücksichtigen Sie die folgenden Stadt- und Regionsstrukturen:
type City struct { ID int Name string Regions []Region } type Region struct { ID int Name string Shops []Destination Masters []Master EducationCenters []Destination }
Um mehrere Datenentitäten zu übergeben Für eine verschachtelte Vorlage kann eine benutzerdefinierte Funktion Wrap() wie folgt definiert werden:
func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} { return map[string]interface{}{ "Shops": shops, "CityName": cityName, "RegionName": regionName, } }
Diese Funktion umschließt Die Geschäfte ordnen die Namen von Städten und Regionen auf einer Karte an. Die geänderte Vorlage würde nun so aussehen:
const src = ` {{define "data"}} City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}} {{end}} {{- range . -}} {{$city:=.Name}} {{- range .Regions -}} {{$region:=.Name}} {{- template "data" (Wrap .Shops $city $region) -}} {{end}} {{- end}}`
Ausführbares Beispiel
Der folgende Code zeigt, wie diese Lösung in der Praxis eingesetzt werden kann:
package main import ( "os" "text/template" ) type City struct { ID int Name string Regions []Region } type Region struct { ID int Name string Shops []Destination Masters []Master EducationCenters []Destination } type Destination struct { Name string } func main() { 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) } } const src = ` {{define "data"}} City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}} {{end}} {{- range . -}} {{$city:=.Name}} {{- range .Regions -}} {{$region:=.Name}} {{- template "data" (Wrap .Shops $city $region) -}} {{end}} {{- end}}`
Dieser Code demonstriert die erfolgreiche Übergabe mehrerer Datenentitäten an eine verschachtelte Vorlage mithilfe einer benutzerdefinierten Funktion.
Das obige ist der detaillierte Inhalt vonWie kann ich mehrere Werte von einer Go-Vorlage an eine verschachtelte Vorlage übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!