Golang Go语言中如何渲染已有模板但不直接返回

发布于 1周前 作者 songsunli 来自 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

3 回复

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或其他格式的文本时。如果你想渲染模板但不直接返回给客户端,比如将结果存储到变量中或进行进一步处理,可以通过以下步骤实现:

  1. 解析模板:首先,你需要解析模板文件或模板字符串。这通常通过template.ParseFilestemplate.New("name").Parse方法完成。

  2. 准备数据:准备传递给模板的数据。这些数据通常是一个结构体或一个map,包含模板中需要的所有变量。

  3. 执行模板:使用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变量中,你可以根据需要对它进行进一步处理。

回到顶部