Go でテンプレートからテンプレートに複数の値を渡す: 総合ガイド
Go で 1 つのテンプレートから別のテンプレートに複数の値を上手に転送するにはどうすればよいですか行く?指定されたコンテキストを考慮します。
main 関数で、私はCityWithSomeData:
tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
を使用してテンプレート city.gohtml を実行します。テンプレート内で、都市と地域を反復してデータを別のテンプレート データに渡すことを目的としています:
{{range .}} {{$city:=.Name}} {{range .Regions}} {{$region:=.Name}} {{template "data" .Shops $city $region}} {{end}} {{end}}
ソリューション
Go テンプレートのドキュメントによると、 {{template}} アクションでは、オプションのデータ値を 1 つだけ渡すことができます。複数の値を渡すには、まずそれらをマップや構造体などの単一の値にカプセル化する必要があります。
テンプレート内に Go コードを記述することは現実的ではないため、これを実行するカスタム関数を登録できます。 task:
func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} { return map[string]interface{}{ "Shops": shops, "CityName": cityName, "RegionName": regionName, } }
カスタム関数は Template.Funcs() を使用して登録されます。次に、Wrap() 関数を呼び出すようにテンプレートを変更します。
{{define "data"}} City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}} {{end}} {{- range . -}} {{$city:=.Name}} {{- range .Regions -}} {{$region:=.Name}} {{- template "data" (Wrap .Shops $city $region) -}} {{end}} {{- end}}
最後に、これらの概念を示すサンプル コードです。
t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{ "Wrap": Wrap, }).Parse(src)) CityWithSomeData = [...cities] if err := t.ExecuteTemplate(os.Stdout, "cities.gohtml", CityWithSomeData); err != nil { panic(err) }
このアプローチにより、複数の値を効率的に渡すことができます。 Go で 1 つのテンプレートから別のテンプレートへ。
以上がGo テンプレート間で複数の値を効率的に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。