如何获得模板渲染的结果

我刚接触golang。


这是我的问题:我想获取template.Execute的字符串结果,并且我不想直接对http.ResponsWriter执行


这是我的代码,它似乎无法正常工作


package main


import (

    "fmt"

    "os"

    "template"

)


type ByteSlice []byte


func (p *ByteSlice) Write(data []byte) (lenght int, err os.Error) {

    *p = data

    return len(data), nil

}


func main() {

    page := map[string]string{"Title": "Test Text"}

    tpl, _ := template.ParseFile("test.html")

    var b ByteSlice

    tpl.Execute(&b, &page)

    fmt.Printf(`"html":%s`, b)

}

和text.html:


<html>

<body>

    <h1>{{.Title|html}}</h1>

</body>

</html>

但是我得到的是


"html":</h1>

</body>

</html>


森林海
浏览 216回答 1
1回答

暮色呼如

ByteSlice的Write方法有问题。它应该将新数据附加到已写入的数据上,但是您的版本将替换已写入的数据。模板代码可能多次调用Write,因此最终只能打印出最后写入的内容。代替创建ByteSlice,使用bytes.Buffer。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go