如何基于属性呈现正确的css类?

时间:2016-05-29 15:55:33

标签: go go-templates

我的模板目前看起来像这样:

{{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语句中不允许使用表达式?

1 个答案:

答案 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中,两者都用正确的类生成相同的输出。