为了账号安全,请及时绑定邮箱和手机立即绑定

嵌套 golang 模板中的变量

嵌套 golang 模板中的变量

Go
白衣非少年 2022-03-07 16:07:35
我想在 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" . }}问题是嵌套模板(子模板)似乎无法访问任何变量。从文档中,“模板调用不会从其调用点继承变量。” 阅读“文本/模板”的文档,听起来变量可能无法在嵌套模板中使用。关于如何将这些变量从二进制文件中取出并放入嵌套模板可访问的单个文本位置的任何建议,这些模板不需要在更改时重新编译?
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

你确实可以!您只需将变量传递到嵌套模板中。


您引用的文档是关于模板如何无法从 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 main


import (

    "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


查看完整回答
反对 回复 2022-03-07
  • 1 回答
  • 0 关注
  • 358 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号