Home >Backend Development >Golang >How Can I Extract All Actions from a Parsed HTML Template?
Given a parsed template, how can we retrieve a list of all the actions defined within it?
Note that the method we'll use, Template.Tree, is not intended for external use. It's exported solely for the internal workings of the html/template package. Relying on it in your code can lead to unexpected behavior in future releases of the package.
A parsed template is represented internally as a tree (parse.Tree) comprising various nodes. Each node represents a specific element within the template, such as text, fields, function calls, and so on.
To find the actions, we'll traverse this tree recursively, looking for nodes of type parse.NodeAction. These nodes represent non-control actions, such as field evaluations.
import ( "fmt" "html/template" "text/template/parse" ) func ListTemplateFields(t *template.Template) []string { return listNodeFields(t.Tree.Root, nil) } func listNodeFields(node parse.Node, results []string) []string { if node.Type() == parse.NodeAction { results = append(results, node.String()) } if listNode, ok := node.(*parse.ListNode); ok { for _, n := range listNode.Nodes { results = listNodeFields(n, results) } } return results }
t := template.Must(template.New("example").Parse(`{{ .name }} {{ .age }}`)) fields := ListTemplateFields(t) fmt.Println(fields)
[{{.name}} {{.age}}]
The above is the detailed content of How Can I Extract All Actions from a Parsed HTML Template?. For more information, please follow other related articles on the PHP Chinese website!