从解析模板获取动作列表
问题:
如何检索来自 a 的模板操作列表(例如由 {{ .blahblah }} 定义的操作)解析的模板?
前言:
如上所述,Template.Tree 字段不应依赖于模板执行中的输入提供。预先定义模板及其预期数据至关重要。
解决方案:
要检查已解析的模板,请导航其解析树 (template.Template.Tree) 。该树中的节点代表各种元素,包括模板操作。在这里,我们关注 parse.NodeAction 类型的节点(作为字段计算的操作)。
代码示例:
以下代码递归遍历解析树以识别节点使用 NodeAction类型:
func ListTemplFields(t *template.Template) []string { return listNodeFields(t.Tree.Root, nil) } func listNodeFields(node parse.Node, res []string) []string { if node.Type() == parse.NodeAction { res = append(res, node.String()) } if ln, ok := node.(*parse.ListNode); ok { for _, n := range ln.Nodes { res = listNodeFields(n, res) } } return res }
用法:
在解析的模板上调用 ListTemplFields 函数以检索操作标记列表:
t := template.Must(template.New("cooltemplate"). Parse(`<h1>{{ .name }} {{ .age }}</h1>`)) fmt.Println(ListTemplFields(t))
输出:
提供的模板的输出将是:
[{{.name}} {{.age}}]
以上是如何从解析的 Go 模板中提取操作列表?的详细内容。更多信息请关注PHP中文网其他相关文章!