Lors de l'utilisation d'un pipeline de plage ({{range pipeline}} T1 {{ end}}) dans le package texte/modèle, la valeur du pipeline externe est-elle accessible avant l'action de plage ou lorsque le pipeline parent/global est transmis à Execute().
Dans l'exemple suivant, nous essayons d'accéder à .Path dans le pipeline de plage, mais .Path n'est pas disponible car lorsque le point itère sur les éléments 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"}}) }
Utilisation de la variable $ (Recommandé)
Selon la documentation texte/modèle, au début de l'exécution, $ est défini sur l'argument data transmis à Execute(), qui est la valeur de départ de dot. Cela signifie que le .Path de la portée externe est accessible à l'aide de $.Path.
const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`
Utilisation d'une variable personnalisée (solution héritée)
Une autre approche consiste à utiliser une variable personnalisée pour transmettre une valeur dans la portée de la plage, comme indiqué ci-dessous :
const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!