{{range pipeline}} T1 {{end}}在text/template包中的某个动作内,是否可以在range动作之前访问管道值,或者是否可以将父/全局管道作为参数传递给Execute?
{{range pipeline}} T1 {{end}}
text/template
工作示例显示了我尝试执行的操作:
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"}}) }
play.golang.org
使用$变量(推荐)
从软件包文本/模板文档中:
开始执行时,将$设置为传递给Execute的数据参数,即dot的起始值。
正如@Sandy所指出的,因此可以使用来访问外部作用域中的Path $.Path。
$.Path
const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`
使用自定义变量(旧答案)
发帖后几分钟就找到了一个答案。 通过使用变量,可以将值传递到range范围中:
range
const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`