टेम्पलेट में मानचित्र के माध्यम से Iterating


94

मैं एक सूची जिम कक्षाएं (योगा, पिलेट्स आदि) प्रदर्शित करने की कोशिश कर रहा हूं। प्रत्येक वर्ग के प्रकार के लिए कई कक्षाएं हैं, इसलिए मैं सभी योग कक्षाओं, और सभी पिलेट्स कक्षाओं और इतने पर समूह बनाना चाहता हूं।

मैंने एक स्लाइस लेने और इसका एक नक्शा बनाने के लिए यह फ़ंक्शन बनाया

func groupClasses(classes []entities.Class) map[string][]entities.Class {
    classMap := make(map[string][]entities.Class)
    for _, class := range classes {
        classMap[class.ClassType.Name] = append(classMap[class.ClassType.Name], class)
    }
    return classMap
}

समस्या यह है कि अब मैं इसके माध्यम से कैसे पुनरावृत्ति कर सकता हूं, http://golang.org/pkg/text/template/ के अनुसार , आपको इसे .Keyप्रारूप में एक्सेस करने की आवश्यकता है , मुझे कुंजियों की जानकारी नहीं है (जब तक कि मैंने एक स्लाइस भी पारित नहीं किया हो) टेम्पलेट में कुंजियों की)। मैं इस नक्शे को अपने विचार में कैसे अनपैक करूं।

वर्तमान में मेरे पास सब कुछ है

{{ . }} 

जो कुछ इस तरह प्रदर्शित करता है:

map[Pilates:[{102 PILATES ~/mobifit/video/ocen.mpg 169 40 2014-05-03 23:12:12 +0000 UTC 2014-05-03 23:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC {PILATES Pilates 1 2014-01-22 21:46:16 +0000 UTC} {1 leebrooks0@gmail.com password SUPERADMIN Lee Brooks {Male true} {1990-07-11 00:00:00 +0000 UTC true} {1.85 true} {88 true} 2014-01-22 21:46:16 +0000 UTC {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false}} [{1 Mat 2014-01-22 21:46:16 +0000 UTC}]} {70 PILATES ~/mobifit/video/ocen.mpg 119 66 2014-03-31 15:12:12 +0000 UTC 2014-03-31 15:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC 

जवाबों:


169

गो टेम्प्लेट डॉक्स में चर खंड की जाँच करें । एक श्रेणी दो वेरिएबल्स की घोषणा कर सकती है, जो अल्पविराम द्वारा अलग होती हैं। निम्नलिखित काम करना चाहिए:

{{ range $key, $value := . }}
   <li><strong>{{ $key }}</strong>: {{ $value }}</li>
{{ end }}

47

जैसा कि हरमन ने कहा, आप प्रत्येक पुनरावृत्ति से सूचकांक और तत्व प्राप्त कर सकते हैं।

{{range $index, $element := .}}{{$index}}
{{range $element}}{{.Value}}
{{end}}
{{end}}

काम करने का उदाहरण:

package main

import (
    "html/template"
    "os"
)

type EntetiesClass struct {
    Name string
    Value int32
}

// In the template, we use rangeStruct to turn our struct values
// into a slice we can iterate over
var htmlTemplate = `{{range $index, $element := .}}{{$index}}
{{range $element}}{{.Value}}
{{end}}
{{end}}`

func main() {
    data := map[string][]EntetiesClass{
        "Yoga": {{"Yoga", 15}, {"Yoga", 51}},
        "Pilates": {{"Pilates", 3}, {"Pilates", 6}, {"Pilates", 9}},
    }

    t := template.New("t")
    t, err := t.Parse(htmlTemplate)
    if err != nil {
        panic(err)
    }

    err = t.Execute(os.Stdout, data)
    if err != nil {
        panic(err)
    }

}

आउटपुट:

Pilates
3
6
9

Yoga
15
51

खेल का मैदान: http://play.golang.org/p/4ISxcFKG7v


अरे @anisus, मुझे नीचे जैसे टेम्पलेट के माध्यम से json उत्पन्न करने की आवश्यकता है, लेकिन इसमें अतिरिक्त कॉमा भी हैं, जैसे दिए गए उदाहरण में दिए पते में सरणी, आउटपुट `` {"नाम": "मूसा", "प्रशंसा": [{"पता ":" ए "}, {" पता ":" बी "},]}` `` उदाहरण कोड का लिंक play.golang.org/p/nD08y0noPHv
मोहम्मद मुस्तकीम

1
@MohammadMustaqeem आप प्रत्येक पुनरावृत्ति के सूचकांक की जांच कर सकते हैं, और पहले पुनरावृत्ति पर अल्पविराम नहीं जोड़ सकते हैं। उदाहरण देखें: play.golang.org/p/5544hc_0_g8 । बस थोड़ा सावधान रहें। JSON को टेम्प्लेट के साथ रेंडर करना मुद्दों से बचने का कारण होगा। मैंने "C & D" पता जोड़ा।
एनिसस

धन्यवाद। मैंने "html / टेम्पलेट" के बजाय "टेक्स्ट / टेम्प्लेट" आयात करके भागने के मुद्दे को हल किया है। play.golang.org/p/PXTNZGWx7Yi
मोहम्मद मुस्तक़ीम

1
@MohammadMustaqeem दुर्भाग्य से अब आप अमान्य JSON, या इससे भी बदतर, इंजेक्शन JSON: play.golang.org/p/kd9bM_rpwyg प्राप्त कर सकते हैं । Json उत्पन्न करने के लिए टेम्प्लेट का उपयोग करना नासमझी है, लेकिन यदि आपको ऐसा करना है, तो JSON मानों जैसे js (इस उदाहरण में भी) के साथ कार्य से बच जाएँ।
एनिसस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.