{{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"}})
}
$変数の使用(推奨)
パッケージから テキスト/テンプレート ドキュメント:
実行が開始されると、$は実行に渡されるデータ引数、つまりドットの開始値に設定されます。
@Sandyが指摘しているように、したがって、$.Path
を使用して外部スコープのパスにアクセスすることが可能です。
const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`
カスタム変数の使用(古い回答)
投稿後わずか数分で1つの回答が見つかりました。
変数を使用することにより、値をrange
スコープに渡すことができます。
const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`