动态处理模板映射值



我有这样的注释对象:

Annotations: map[string]string{
"common": "Some GPM consistency checkers have failed.",
"t_0": "Title1",
"t_1": "Title2",
"v_0": "V1",
"v_1": "V2",

我想把它打印在表格中,像

<表类>Title1Title2tbody><<tr>V1V2

我认为你应该在你的Go模板中添加一个辅助函数。

var testTemplate *template.Template
func main() {
var err error
testTemplate, err = template.ParseFiles("hello.gohtml")
if err != nil {
panic(err)
}
http.HandleFunc("/", handler)
http.ListenAndServe(":3000", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
data := struct {
FindValue   func(ann map[string]string, needle string) string
Annotations map[string]string
}{
FindValue,
map[string]string{
"common": "Some GPM consistency checkers have failed.",
"t_0":    "Title1",
"t_1":    "Title2",
"v_0":    "V1",
"v_1":    "V2",
},
}
err := testTemplate.Execute(w, data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
func FindValue(ann map[string]string, needle string) string {
var code = strings.Replace(needle, "t_", "", 1)
for key, val := range ann {
if key == "v_"+code {
return val
}
}
return ""
}

,那么你可以在模板中使用这个函数,像这样:

{{ range $key, $value := .Annotations.SortedPairs }}
{{ if match "^t_" .$key }}
<p>{{FindValue ".$key"}}</p>
{{ end  }}
{{ end }}
我希望这对你有帮助。如果有任何问题告诉我,因为我没有测试这段代码。

最新更新