猿问

嵌套 golang 模板中的变量

我想在 golang 模板中定义变量,而不是在二进制文件中,这样就不需要重新编译。


在 Go 中,我设置了一些变量:


var animals = map[string]string{

    "spirit_animal":    "cat",

    "spirit_predator":  "dog",

}

我用这个执行模板:t.ExecuteTemplate(w, "main", variables)它将这些变量传递给模板。


现在我想把这些变量从 go 带入“主”模板。


{{$spirit_animal:="cat"}} {{$spirit_animal}}

我这样称呼子模板:


{{ template "navbar" . }}

问题是嵌套模板(子模板)似乎无法访问任何变量。


从文档中,“模板调用不会从其调用点继承变量。” 阅读“文本/模板”的文档,听起来变量可能无法在嵌套模板中使用。


关于如何将这些变量从二进制文件中取出并放入嵌套模板可访问的单个文本位置的任何建议,这些模板不需要在更改时重新编译?


白衣非少年
浏览 359回答 1
1回答

MMMHUHU

你确实可以!您只需将变量传递到嵌套模板中。您引用的文档是关于模板如何无法从 go 过程中读取变量的,除非您明确将它们传入。同样,嵌套模板将获取您传递给它们的任何内容,仅此而已。来自https://golang.org/pkg/text/template/#hdr-Actions{{template "name"}}    The template with the specified name is executed with nil data.{{template "name" pipeline}}    The template with the specified name is executed with dot set    to the value of the pipeline.下面是一个根据您的提示轻而易举的简单示例:package mainimport (    "os"    "text/template")func main() {    var animals = map[string]string{        "spirit_animal":   "cat",        "spirit_predator": "dog",    }    const letter = `{{define "echo"}}Inside a template, I echo what you say: {{.}}{{end}}{{define "predator"}}Inside a template, I know that your predator is: {{.spirit_predator}}{{end}}Your spirit animal is: {{.spirit_animal}}{{template "predator" . }}{{template "echo" .spirit_animal }}`    t := template.Must(template.New("letter").Parse(letter))    _ = t.Execute(os.Stdout, animals)}https://play.golang.org/p/3X7IQasWlsR
随时随地看视频慕课网APP

相关分类

Go
我要回答