【问题标题】:Conditional statement in GAE Go template packageGAE Go 模板包中的条件语句
【发布时间】:2012-12-20 04:52:19
【问题描述】:

如何在 GAE GO 的 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 具有值时才评估为 true。任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: google-app-engine templates go conditional


    【解决方案1】:

    基本模板包中没有等式声明。
    这是一个关于它的interesting discussion from golang-nuts。

    你有几种可能:

    • 为相等定义一个外部函数,就像 Russ Cox 在 golang-nuts 线程中建议的那样,并使用 if 条件对其进行测试
    • 使用基本模板包可以理解的东西(见下面我的代码)
    • 从模板中删除一些逻辑:您可以构造一个带有 selected 布尔字段的数据类型,而不是使用 6 个硬编码字段,并使用 range 语句将这些对象中的 6 个数组提供给模板

    我使用一段布尔值重新创建了您的示例:

    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}}
    

    不过,您仍然可以选择在模板中保留尽可能少的逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 2014-07-01
      • 2014-01-18
      • 2014-03-11
      • 1970-01-01
      相关资源
      最近更新 更多