在 Go 模板中,访问范围内的父/全局管道

是否有可能{{range pipeline}} T1 {{end}}在text/template包中的操作中访问范围操作之前的管道值,或者作为参数传递给 Execute 的父/全局管道?


显示我尝试做的工作的示例:


package main


import (

    "os"

    "text/template"

)


// .Path won't be accessible, because dot will be changed to the Files element

const page = `{{range .Files}}<script src="{{html .Path}}/js/{{html .}}"></script>{{end}}`


type scriptFiles struct {

    Path string

    Files []string

}


func main() {

    t := template.New("page")

    t = template.Must(t.Parse(page))


    t.Execute(os.Stdout, &scriptFiles{"/var/www", []string{"go.js", "lang.js"}})

}

https://play.golang.org/p/gO6w0o3FeP

呼啦一阵风
浏览 172回答 1
1回答

慕村225694

使用 $ 变量(推荐)从包文本/模板文档:执行开始时,$ 设置为传递给 Execute 的数据参数,即 dot 的起始值。正如@Sandy 指出的那样,因此可以使用$.Path.const&nbsp;page&nbsp;=&nbsp;`{{range&nbsp;.Files}}<script&nbsp;src="{{html&nbsp;$.Path}}/js/{{html&nbsp;.}}"></script>{{end}}`使用自定义变量(旧答案)发布后几分钟就找到了一个答案。通过使用变量,可以将值传递到range作用域中:const&nbsp;page&nbsp;=&nbsp;`{{$p&nbsp;:=&nbsp;.Path}}{{range&nbsp;.Files}}<script&nbsp;src="{{html&nbsp;$p}}/js/{{html&nbsp;.}}"></script>{{end}}`
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go