html - Go 模板中的嵌套范围

标签 html templates go range

我有这样的结构

type Users struct{  
    Name           string           `json:"Name,omitempty"`  
    Gender         string           `json:"Gender,omitempty"`  
    Communication  []*Communication `json:"Communication,omitempty"`  
}  

type Communication struct {  
    Type  string `json:"Type,omitempty"`  
    Value string `json:"Value,omitempty"`  
}  

每个用户都会有两种通信结构,例如

[
    {
        "Type": "MOBILE",
        "Value": "12121212"
    },
    {
        "Type": "Email",
        "Value": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="04576b6961446169656d682a676b69" rel="noreferrer noopener nofollow">[email protected]</a>"
    }
]  

在我的模板中,我想将它们显示在表格中。我正在获取用户结构值,但无法获取通信结构值

HTML 模板文件(部分代码):

<tbody>  
{{range $key, $val := .Users}}   
<td style="text-align: center;">{{$val.Name}}</td>  
<td style="text-align: center;">{{$val.Gender}}</td>  
///////How to display communication values here??////////////  
{{end}}  
</tbody>

最佳答案

您可以像访问其他字段一样访问“通信”字段。

{{$val.Communication}}

因为您希望这些条目分别位于 <td> 中如果你可以把它们放在 map 中,那就更容易了而不是slice 。您可以使用如下所示的函数来实现此目的。

sliceToMap := func(s []*Communication) map[string]string {
    comms := map[string]string{}

    for _, c := range s {
        comms[c.Type] = c.Value
    }

    return comms
}

您可以将其注册为要在模板中使用的自定义函数,

t := template.Must(template.New("").Funcs(template.FuncMap{
    "SliceToMap": sliceToMap,
}).Parse(src))

那么你的模板可能是,

<tbody>  
{{range $key, $val := .Users}}   
<td style="text-align: center;">{{$val.Name}}</td>  
<td style="text-align: center;">{{$val.Gender}}</td> 

{{$comms := SliceToMap $val.Communication}}

<td style="text-align: center;">{{index $comms "mobile"}}</td>
<td style="text-align: center;">{{index $comms "email"}}</td>

{{end}}  
</tbody>

请参阅 Go Playground

关于html - Go 模板中的嵌套范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36425071/

相关文章:

javascript - Laravel 使用 Ajax 以一种形式更新数据和文件?当方法/类型为='PUT'时

c++ - 理解继承的嵌套类模板的偏特化

javascript - 如何使带有 iframe 的网站响应屏幕尺寸

html - Angular 2 限制在控件上触发的事件或 Action 的数量

html - 如何使此 iframe 代码响应

templates - polymer 模板 : What are valid selects for content insertion points

c++ - 如何仅使用容器模板?

json - golang无法解析反射创建的对象的json

arrays - 高语 : How to delete an element from a 2D slice?

go - Go安装程序未安装“开始”菜单组而不是“科学”