gpt4 book ai didi

go - beego 模板 - 使用 map 的键或值作为其他 map 的键或将其传递给模板函数

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:35 25 4
gpt4 key购买 nike

我有以下 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 数据结构,如下面的 Controller 函数定义

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的key或value传递给golang模板函数?

2- 如果您仔细查看上面的结构,您会发现我不需要编写模板函数。我应该得到这样的值(value){{ .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 {}

最佳答案

看起来您正在尝试使用点运算符访问 map 的内部结构。不知道最终结果应该是什么样子使这变得有点困难。

我认为这个例子可以帮助你解决这两个问题:

{{ range $eachCategory, $subCategoriesList := .CategoryGroup }}
<li class="bold"><a class="collapsible-header waves-effect waves-teal">{{ $eachCategory }}</a>
<div class="collapsible-body" style="">
<ul>
{{ range $key, $val := index .CatAttributeMapping $eachCategory }}
<li><a id="{{ $key}}" class='doc_cvt' href="#">{{ $val.title }}</a></li>
{{ end }}
</ul>
</div>
</li>
{{ end }}

有关索引命令的更多详细信息,请查看:http://golang.org/pkg/text/template/

关键部分是

index Returns the result of indexing its first argument by the following arguments. Thus "index x 1 2 3" is, in Go syntax, x1[2][3]. Each indexed item must be a map, slice, or array.

Beego在大多数情况下只是使用golang基础模板系统。

编辑 1:您问的是一个复合问题,所以事情变得有点棘手。首先要弄清楚的是,您是否将数据正确解析为结构。如果您不这样做,go 会将其传递到一个界面中,供您弄清楚如何处理。从您的代码看来,您正在处理这种情况。

所以一次解决一个问题。 this is a great Q&A that covers parsing nested structures in go

如果您仍然遇到问题,我鼓励您使用不同的标签重新提交您的问题。将一个提交给 golang json 以尝试正确解析,并在确认结构设置正确后将一个提交给 golang 模板。
首先将您的数据放入结构中,然后使其与模板一起使用。抱歉,我没有适合您的复制粘贴解决方案,但我现在有点忙。

我会尽我所能回到这个问题,因为我认为你不是一个人。使用 JSON 解析器处理嵌套结构和处理模板引擎可能很困难。我们需要创造更多如何做事的例子!

关于go - beego 模板 - 使用 map 的键或值作为其他 map 的键或将其传递给模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39694331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com