如何在GAE GO中的html模板中执行条件语句?我试图完成此操作,以便在select html标记中选择一个选项:
<select name=".Grade">
<option value=""></option>
<option value="1" {{ if .Grade="1" }} selected="selected" {{ end }}>Grade One</option>
<option value="2" {{ if .Grade="2" }} selected="selected" {{ end }}>Grade Two</option>
<option value="3" {{ if .Grade="3" }} selected="selected" {{ end }}>Grade Three</option>
<option value="4" {{ if .Grade="4" }} selected="selected" {{ end }}>Grade Four</option>
<option value="5" {{ if .Grade="5" }} selected="selected" {{ end }}>Grade Five</option>
<option value="6" {{ if .Grade="6" }} selected="selected" {{ end }}>Grade Six</option>
</select>
有
{{ if .Grade }} selected="selected" {{ end }}
在参考文档中但如果.Grade
具有值,则仅评估为true。任何帮助将受到高度赞赏。谢谢!
答案 0 :(得分:17)
基本模板包中没有相等的声明 这是关于它的interesting discussion from golang-nuts。
您有几种可能性:
if
条件测试它selected
布尔字段的数据类型,而不是拥有6个硬编码字段,并将一个包含6个这些对象的数组提供给带有range
的模板声明我使用一片布尔值重新创建了你的例子:
func main() {
temp,err := template.ParseFiles("template.html")
if err != nil {
panic(err)
}
g := make([]bool, 7)
g[1] = true
temp.Execute(os.Stdout, &g)
}
模板中的一行如下所示:
<option value="3"{{ if index . 3 }} selected="selected"{{ end }}>Grade Three</option>
这对我来说不太好看。但我会说所有的解决方案都有它们的缺点,这是一个品味问题(第三种解决方案应该更清洁,但对于这么简单的事情可能会被认为是过度杀伤)。
编辑(2013/12/11)
在Go 1.2(released on 2013/12/01)中,template engine已更新并包含新运算符,包括比较。现在应该按预期工作:
{{if eq .Grade 1 }} selected="selected" {{end}}
但您仍然可以选择在模板中保留尽可能少的逻辑。