我的模板目前看起来像这样:
{{range .Users}}
<div ...>
<div class="row XXXX">
</div>
{{end}}
XXX必须替换为基于User结构属性的css类,UserLevel是一个字符串。
因此,根据UserLevel的值,我将显示正确的css类:
UserLevel是&#34;求得&#34;然后我需要输出&#34;初学者&#34;。 UserLevel是&#34; int&#34;然后我需要输出&#34;中间&#34; 等
我知道我可以重命名css类以匹配属性的值,但我不想在2之间保持紧密耦合。
这是否可能以某种方式做,因为在if语句中不允许使用表达式?
答案 0 :(得分:1)
有几种方法可以做到这一点,我将介绍两种方法。第一种方法是在模板中使用if语句和相等测试:
{{range $count, $user := .Users}}
<div ...>
<div class="row {{if eq $user.UserLevel "beg"}}beginner{{else if eq $user.UserLevel "int" }}intermediate{{else}}default{{end}}">
</div>
{{end}}
第二种方法是为User定义一个函数,该函数根据UserLevel
属性输出正确的类:
func (u User) CssClass() string {
switch u.UserLevel {
case "beg":
return "beginner"
case "int":
return "intermediate"
default:
return ""
}
}
{{range $count, $user := .Users}}
<div ...>
<div class="row {{$user.CssClass}}">
</div>
{{end}}
我把这个小测试代码放在Go playground中,两者都用正确的类生成相同的输出。