ホームページ >バックエンド開発 >Golang >Go テンプレートの {{template}} アクションに複数の値を渡す方法は?

Go テンプレートの {{template}} アクションに複数の値を渡す方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-05 20:38:13767ブラウズ

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

テンプレート間で複数の値を渡す

Go テンプレートでは、{{template}} アクションはオプションの引数を 1 つだけ受け取ります。複数の値を渡すには、それらの値を 1 つの値内にカプセル化する必要があります。

データのカプセル化

1 つの方法は、必要な値を受け入れて値を返すラッパー関数を使用することです。単一の値。たとえば、都市と地域のデータのラッパー関数を作成できます。

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}

ラッパー関数の登録

カスタム関数は、Template.Funcs を使用して登録できます。 ()。これは、テンプレートを解析する前に行う必要があります:

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))

Modified Template

その後、テンプレートを変更して 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 := []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)
}

出力:

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}]

以上がGo テンプレートの {{template}} アクションに複数の値を渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。