Home > Backend Development > Golang > How Can I Extract All Actions from a Parsed HTML Template?

How Can I Extract All Actions from a Parsed HTML Template?

Barbara Streisand
Release: 2024-12-26 02:58:10
Original
909 people have browsed it

How Can I Extract All Actions from a Parsed HTML Template?

How to Inspect a Parsed Template for Embedded Actions

Problem Statement

Given a parsed template, how can we retrieve a list of all the actions defined within it?

Solution

Disclaimer: Internal API Usage

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.

Walkthrough

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.

Implementation

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
}
Copy after login

Example Usage

t := template.Must(template.New("example").Parse(`{{ .name }} {{ .age }}`))
fields := ListTemplateFields(t)
fmt.Println(fields)
Copy after login

Output

[{{.name}} {{.age}}]
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template