Golang Go语言中如何渲染已有模板但不直接返回
Golang Go语言中如何渲染已有模板但不直接返回
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
更多关于Golang Go语言中如何渲染已有模板但不直接返回的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
ExecuteTemplate,第二个参数是模板文件名,传"http.tmpl"
https://gist.github.com/wangsongyan/f9e187b8f5a7933d5c61d0dab68c56db
更多关于Golang Go语言中如何渲染已有模板但不直接返回的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我测了下 ExecuteTemplate 的第二个参数确切来说应该是模板里的 {{define “form”}} 里的"form",ParseFiles 这里才是模板绝对路径。
在Golang中,使用模板(Template)进行内容渲染是常见的需求,特别是当你需要生成HTML或其他格式的文本时。如果你想渲染模板但不直接返回给客户端,比如将结果存储到变量中或进行进一步处理,可以通过以下步骤实现:
-
解析模板:首先,你需要解析模板文件或模板字符串。这通常通过
template.ParseFiles
或template.New("name").Parse
方法完成。 -
准备数据:准备传递给模板的数据。这些数据通常是一个结构体或一个map,包含模板中需要的所有变量。
-
执行模板:使用
template.Execute
方法将模板和数据结合起来,但此时不直接输出到http.ResponseWriter
。你可以创建一个bytes.Buffer
来捕获输出。
示例代码如下:
package main
import (
"bytes"
"html/template"
"log"
)
func main() {
tmpl, err := template.ParseFiles("template.html")
if err != nil {
log.Fatal(err)
}
data := struct {
Title string
}{
Title: "Hello, World!",
}
var output bytes.Buffer
err = tmpl.Execute(&output, data)
if err != nil {
log.Fatal(err)
}
// Now you can use output.String() for further processing
log.Println(output.String())
}
这样,模板的渲染结果就被存储在output
变量中,你可以根据需要对它进行进一步处理。