【问题标题】:How to parse HTML template in GO, Google App Engine如何在 GO、Google App Engine 中解析 HTML 模板
【发布时间】:2012-11-25 19:26:52
【问题描述】:

我正在尝试使用 Google App Engine 在 GO 中创建一个页面,该页面可以通过 HTML 解析显示数组的内容。

    package hello

import (
    "fmt"
    "html/template"
    "net/http"
)

func init() {
    http.HandleFunc("/", root)
}

const TemplateHTML = `
<html>
  <body>
   <table width="700"  border="1" align="center">
  <tr>
    <td>
    {{range}} {{.name}} {{end}} {{range}} {{.Count}} {{end}}
</td>
  </tr>
</table>

  </body>
</html>
`

func root(w http.ResponseWriter, r *http.Request) {
    type variables struct {
        Name    string
        Count   int
    }
    var data = []variables{
        {"John", 25},
        {"George", 35},
        {"NoName", 27},
    }

    //name := variables{"Somebody", 25}
    tmpl, err := template.New("i").Parse(TemplateHTML)

    if err != nil {
         fmt.Fprint(w, err)
    }
    err = tmpl.Execute(w, data)
    if err != nil {
         fmt.Fprint(w, err)
    }

}

但我只收到内部服务器错误

当我使用err = tmpl.Execute(w, name)(您可以在代码的注释中找到“名称”)时,一切正常。

您知道可能是什么问题吗?我是golang的新手。

谢谢!

【问题讨论】:

    标签: html google-app-engine parsing templates go


    【解决方案1】:

    其他人会以更简洁/准确的答案做出回应,但让上述示例生效的一种简单方法是将您的 data 声明更改为:

    var data = []variables{
        variables{"John", 25},
        variables{"George", 35},
        variables{"NoName", 27},
    }
    

    在这里,您将data 切片的每个元素都设为variables 类型,这将匹配定义中的variables 类型。我相信这是您当前版本的主要问题 - 未向 data 提供正确的数据类型。然后,您只需要调整您的模板,使您的字符串如下所示:

    const TemplateHTML = `
    <html>
      <body>
       <table width="700"  border="1" align="center">
        {{range .}}
        <tr>
          <td>{{.Name}}</td><td>{{.Count}}</td>
        </tr>
        {{end}}
      </tr>
    </table>
    
      </body>
    </html>
    `
    

    这里的关键更改是:将.Name 设为大写,使其与属性名称匹配,并将tr 包装在{{range .}} 块中,以便为每个条目创建一个新行(我假设这就是您要查找的内容- 如果没有,请确保 range 包含您想要的任何动态内容。

    【讨论】:

    • @valaki 当然可以,很乐意提供帮助!
    • 这不对。没有必要在 []variables 的切片文字中说 variables。该更改对编译后的代码没有影响。
    【解决方案2】:

    如果template.Parse 返回错误,则不能使用它返回的其他值。如果模板执行失败,您将尝试在 nil tmpl 上调用 tmpl.Execute,这会导致恐慌。

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 2011-12-12
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      相关资源
      最近更新 更多