2013-01-06 182 views
9

怎么可能在GAE执行HTML模板条件语句中去吗?我试图做到这一点,使在选择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具有价值。任何帮助将不胜感激。谢谢!

回答

15

有一个在基础模板包没有平等的发言。
这是关于它的interesting discussion from golang-nuts

您有几种可能性:

  • 定义平等外部功能,如一个拉斯考克斯建议在golang螺母螺纹以及带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.2released on 2013/12/01),则template engine已被更新,并且包括新的运营商,包括比较。这个现在应该按预期工作:

{{if eq .Grade 1 }} selected="selected" {{end}} 

,您仍然可以选择保留尽可能少的逻辑尽量在你的模板,虽然。

+1

Go 1.2发布 – ithkuil