使用范围管道时 ({{range pipeline}} T1 {{ end}})在文本/模板包中,可以在范围操作之前访问外部管道值,或者作为传递给 Execute() 的父/全局管道。
在下面的示例中,我们尝试访问范围管道内的 .Path,但 .Path 不可用,因为当点迭代 Files 元素时。
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"}}) }
使用 $ 变量(推荐)
根据文本/模板文档,在执行开始时,$ 设置为传递给 Execute() 的数据参数,即起始值的点。这意味着可以使用 $.Path 访问外部作用域的 .Path。
const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`
使用自定义变量(旧解决方案)
另一种方法是使用自定义变量,用于将值传递到范围范围内,如下所示:
const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`
以上是如何在Go模板中访问一定范围内的父/全局管道?的详细内容。更多信息请关注PHP中文网其他相关文章!