【发布时间】:2017-02-03 07:04:56
【问题描述】:
我有以下 JSON 结构。
func getJsonMappings() *string {
data := `{
"CategoryGroup": {
"Category subgrp1": ["type1", "type2"],
},
"CategoryGroupDetail" : {
"type1":{
"extension":"abc",
"title" : "this is description",
"other": "i have some other details apart from above in this map"
},
"type2" :{
"extension":"abc",
"title" : "this is description",
"other": "i have some other details apart from above in this map"
}
}
}`
return &data
}
我正在将 JSON 之上的数据解组为 golang 数据结构,如下面的控制器函数定义
func (this *MainPageController) Get() {
jsonData := getJsonMappings()
var catMapObj map[string]interface{}
err := json.Unmarshal([]byte(*jsonData), &catMapObj)
if err != nil {
panic(err.Error())
}
this.Data["CategoryGroup"] = catMapObj["CategoryGroup"]
this.Data["CatAttributeMapping"] = catMapObj["CatAttributeMapping"]
this.TplName = "index.tpl"
}
并尝试在模板下方呈现。
<ul class="collapsible collapsible-accordion">
{{ range $eachCategory, $subCategoriesList := .CategoryGroup }}
<li class="bold"><a class="collapsible-header waves-effect waves-teal">{{ $eachCategory }}</a>
<div class="collapsible-body" style="">
<ul>
{{ range $_, $subConvertorCategoryId := $subCategoriesList }}
<li><a id="{{ $subConvertorCategoryId }}" class='doc_cvt' href="#">{{ $subConvertorCategoryId|getCategoryTitle }}</a></li>
{{ end }}
</ul>
</div>
</li>
{{ end }}
</ul>
其中 getCategoryTitle 是模板函数。但是我没有得到类型变量作为函数参数的任何值。我的模板函数定义看起来像
func GetCategoryTitle(type string) (title string) {
.....
}
如果我在函数内部将“type”的值硬编码为“type1”,那么一切看起来都很好。但我想在运行时从模板发送值。同时,我可以将“.CategoryGroup”的值传递给模板函数。
因此我的问题是:
1-如何将解析模板时收到的map的键或值传递给golang模板函数?
2- 如果你仔细看上面的结构,你会发现我不需要编写模板函数。我应该得到像 {{ .CategoryGroupDetail.$subConvertorCategoryId.title }}。但我不能这样做。我对 django(python 框架)做了同样的事情。在 golang/beego 中也一定有办法做到这一点。
我是 golang 和 Beego 的新手。请指导我如何进一步进行。
尝试1:
<ul class="collapsible collapsible-accordion">
{{ range $eachCategory, $subCategoriesList := .CategoryGroup }}
<li class="bold"><a class="collapsible-header waves-effect waves-teal">{{ $eachCategory }}</a>
<div class="collapsible-body" style="">
<ul>
{{ range $_, $subConvertorCategoryId := $subCategoriesList }}
{{ $categoryDetail := index .CatAttributeMapping $subConvertorCategoryId}}
<li><a id="{{ $subConvertorCategoryId }}" class='doc_cvt' href="#">{{ $categoryDetail.title }}</a></li>
{{ end }}
</ul>
</div>
</li>
{{ end }}
我在运行时遇到错误 -
template: index.tpl:38:32: executing "index.tpl" at <.CatAttributeMapping>: can't evaluate field CatAttributeMapping in type interface {}
【问题讨论】:
标签: go beego go-templates