猿问

如何在GO,Google App Engine中解析HTML模板

我正在尝试使用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的新手。


浮云间
浏览 214回答 2
2回答

泛舟湖上清波郎朗

其他人将给出更简洁/准确的答案,但是使上述示例起作用的一种简单方法是将data声明更改为:var data = []variables{&nbsp; &nbsp; variables{"John", 25},&nbsp; &nbsp; variables{"George", 35},&nbsp; &nbsp; variables{"NoName", 27},}在这里,您正在制作datatype切片的每个元素,这些元素variables将与variables定义中的类型匹配。我认为这是当前版本的主要问题-未提供正确的数据类型data。然后,您只需要调整模板,以使字符串如下所示:const TemplateHTML = `<html>&nbsp; <body>&nbsp; &nbsp;<table width="700"&nbsp; border="1" align="center">&nbsp; &nbsp; {{range .}}&nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; <td>{{.Name}}</td><td>{{.Count}}</td>&nbsp; &nbsp; </tr>&nbsp; &nbsp; {{end}}&nbsp; </tr></table>&nbsp; </body></html>`此处的主要更改是:使.Name大写字母与属性名称匹配,然后将其包装tr在{{range .}}块中,以便为每个条目创建一个新行(我假设这就是您要查找的内容,否则请确保range包含任何动态内容你要)。

慕田峪7331174

如果template.Parse返回错误,则不能使用它返回的其他值。如果模板执行失败,您将尝试调用tmpl.Executenil&nbsp;tmpl,这将导致恐慌。
随时随地看视频慕课网APP

相关分类

Go
我要回答