Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meluluskan Berbilang Nilai kepada Tindakan {{template}} Templat?

Bagaimana untuk Meluluskan Berbilang Nilai kepada Tindakan {{template}} Templat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-05 20:38:13769semak imbas

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

Melalui Berbilang Nilai Antara Templat

Dalam templat Go, tindakan {{template}} hanya mengambil satu hujah pilihan. Untuk menghantar berbilang nilai, ia mesti dirangkumkan dalam satu nilai.

Data Mengekapkan

Satu pendekatan ialah menggunakan fungsi pembalut yang menerima nilai yang dikehendaki dan mengembalikan nilai tunggal. Sebagai contoh, kami boleh mencipta fungsi pembungkus untuk data Bandar dan Wilayah kami:

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

Mendaftarkan Fungsi Pembungkus

Fungsi tersuai boleh didaftarkan menggunakan Templat.Fungsi (). Ini mesti dilakukan sebelum menghuraikan templat:

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

Templat Diubah Suai

Templat kemudiannya boleh diubah suai untuk memanggil fungsi Wrap() dan menghantar hasilnya kepada {{template}} tindakan:

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

Contoh

Berikut ialah contoh menggunakan struktur Bandar dan Wilayah yang disediakan dalam soalan:

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

Output:

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

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Berbilang Nilai kepada Tindakan {{template}} Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn