Golang 模板 - 如何渲染模板?
来源:Golang技术栈
2023-03-21 18:20:37
0浏览
收藏
本篇文章向大家介绍《Golang 模板 - 如何渲染模板?》,主要包括golang,具有一定的参考价值,需要的朋友可以参考一下。
问题内容
一个带有三个子模板的布局模板。
布局.html
{{template "tags"}} {{template "content"}} {{template "comment"}}
标签.html
{{define "tags"}} <div> {{.Name}} <div> {{end}} <p>内容.html</p> <pre class="brush:go;toolbar:false">{{define "content"}} <div> <p>{{.Title}}</p> <p>{{.Content}}</p> </div> {{end}}
评论.html
{{define "tags"}} <div> {{.Note}} </div> {{end}}
代码
type Tags struct { Id int Name string } type Content struct { Id int Title string Content string } type Comment struct { Id int Note string } func main() { tags := &Tags{"Id":1, "Name":"golang"} Content := &Content{"Id":9, "Title":"Hello", "Content":"World!"} Comment := &Comment{"Id":2, "Note":"Good Day!"} }
我很困惑如何渲染每个子模板并将结果组合到布局输出。
谢谢。
正确答案
与往常一样,文档是一个很好的起点。
稍微解释一下:
- 您不需要结构文字中的字符串:
&Tags{Id: 1}
,不是&Tags{"Id":1}
- 您只能将一个对象传递给您的模板以执行,这将按照您在
{{template
ParseFiles会这样做) - 我使用 os.Stdout 来执行它,但你显然应该用相应的替换它
ResponseWriter
和整个代码:
package main import "fmt" import "html/template" import "os" var page = ` {{template "tags" .Tags}} {{template "content" .Content}} {{template "comment" .Comment}} ` var tags = `{{define "tags"}} <div> {{.Name}} <div> {{end}}` var content = `{{define "content"}} <div> <p>{{.Title}}</p> <p>{{.Content}}</p> </div> {{end}}` var comment = `{{define "comment"}} <div> {{.Note}} </div> {{end}}` type Tags struct { Id int Name string } type Content struct { Id int Title string Content string } type Comment struct { Id int Note string } type Page struct { Tags *Tags Content *Content Comment *Comment } func main() { pagedata := &Page{Tags:&Tags{Id:1, Name:"golang"}, Content: &Content{Id:9, Title:"Hello", Content:"World!"}, Comment: &Comment{Id:2, Note:"Good Day!"}} tmpl := template.New("page") var err error if tmpl, err = tmpl.Parse(page); err != nil { fmt.Println(err) } if tmpl, err = tmpl.Parse(tags); err != nil { fmt.Println(err) } if tmpl, err = tmpl.Parse(comment); err != nil { fmt.Println(err) } if tmpl, err = tmpl.Parse(content); err != nil { fmt.Println(err) } tmpl.Execute(os.Stdout, pagedata) } <p>今天关于《Golang 模板 - 如何渲染模板?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!</p></div></div>
版本声明
本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除