求助 Golang 如何渲染已有模板但不直接返回呢

2020-02-20 13:04:47 +08:00
 vinsec
func Render_(tmp string,ins Instance)[]byte{
	// tmp 为已定义模板的路径 如 "templates/http.tmpl"
        tpl,err := template.ParseFiles(tmp)
	
        if err != nil{
		log.Fatal(err)
	}
	
	data := ins
	var buf bytes.Buffer
	if err := tpl.ExecuteTemplate(&buf,tmp,data); err != nil {
		log.Fatal(err)
	}
	return []byte(buf.String())
	//fmt.Println(buf.String())

}

传入的 ins 对象包括三个属性,装载到已有的模板中,模板里的待渲染的变量是这 3 个的子集(有些模板有 1 个 有些有 2 个)。 请问用原生 template 库该如何实现呢 我上面写的好像实现不了 报 “templates/http.tmpl” undefied

1932 次点击
所在节点    Go 编程语言
2 条回复
wangsongyan
2020-02-21 09:35:30 +08:00
ExecuteTemplate,第二个参数是模板文件名,传"http.tmpl"

https://gist.github.com/wangsongyan/f9e187b8f5a7933d5c61d0dab68c56db
vinsec
2020-02-26 14:48:05 +08:00
@wangsongyan 我测了下 ExecuteTemplate 的第二个参数确切来说应该是模板里的 {{define "form"}} 里的"form",ParseFiles 这里才是模板绝对路径。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX