sag*_*git 10 google-app-engine conditional templates go
如何在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>
Run Code Online (Sandbox Code Playgroud)
有
{{ if .Grade }} selected="selected" {{ end }}
Run Code Online (Sandbox Code Playgroud)
在参考文档中,但如果.Grade有值,则仅评估为true .任何帮助将受到高度赞赏.谢谢!
lbo*_*onn 17
基本模板包中没有相等的语句.
这是一个关于它的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)
}
Run Code Online (Sandbox Code Playgroud)
模板中的一行如下所示:
<option value="3"{{ if index . 3 }} selected="selected"{{ end }}>Grade Three</option>
Run Code Online (Sandbox Code Playgroud)
这看起来对我不太好.但我要说所有解决方案都有它们的缺点,这是一个品味问题(第三种解决方案应该更清洁,但对于这么简单的事情可能会被认为是过度杀伤).
编辑(2013/12/11)
在Go 1.2(2013/12/01发布)中,模板引擎已更新,包括新的运算符,包括比较.现在应该按预期工作:
{{if eq .Grade 1 }} selected="selected" {{end}}
Run Code Online (Sandbox Code Playgroud)
但是,您仍然可以选择在模板中保留尽可能少的逻辑.