模板和自定义功能;错误:在<“funcName”>处执行“templName”不是定义函数

时间:2018-04-02 11:15:10

标签: go go-templates

我得到了一些文字,我正在添加template.AddParseTree方法以附加模板文本,但是有一个堰行为,该方法被用来像这样使用它:

singleTemplate=anyTemplate
targetTemplate=*template.Must(targetTemplate.AddParseTree(e.Name, anyTemplate.Tree))

但是当singleTemplate有一个功能时不起作用,奇怪的是它只在我这样做时才有效

singleTemplate=anyTemplate
targetTemplate=*template.Must(singleTemplate.AddParseTree(e.Name, anyTemplate.Tree))

但它不能那样工作,因为我无法追加任何其他东西 你可以在这里试试:https://play.golang.org/p/f5oXNzD1fKP

package main

import (
    "log"
    "os"
    "text/template"
)

var funcionIncremento = template.FuncMap{
    "inc": func(i int) int {
        return i + 1
    },
}

func main() {

    var strs []string
    strs = append(strs, "test1")
    strs = append(strs, "test2")
    //-----------------Not valid(it would)
    var probar1 = template.Template{}
    var auxiliar1 = template.Template{}
    auxiliar1 = *template.Must(template.New("test").Funcs(funcionIncremento).Parse(`
            {{range $index, $element := .}}
                Number: {{inc $index}}
            {{end}}
    `))

    probar1 = *template.Must(probar1.AddParseTree("test", auxiliar1.Tree))
    err := probar1.ExecuteTemplate(os.Stdout, "test", &strs)
    if err != nil {
        log.Println("Error1: ", err)
    }
//--------------------------------valid(it wouldn´t), because I wouldn´t be able to append
    var probar2 = template.Template{}
    var auxiliar2 = template.Template{}
    auxiliar2 = *template.Must(template.New("test").Funcs(funcionIncremento).Parse(`
            {{range $index, $element := .}}
                Number: {{inc $index}}
            {{end}}
    `))

    probar2 = *template.Must(auxiliar2.AddParseTree("test", auxiliar2.Tree))
    err = probar2.ExecuteTemplate(os.Stdout, "test", &strs)
    if err != nil {
        log.Println("Error2: ", err)
    }
    //-------------------------------------------
}

1 个答案:

答案 0 :(得分:0)

a.AddParseTree("t", b.Tree)仅添加 模板的parse.Tree b它不会添加b的函数,因为它们不属于parse.Tree {1}}类型,它们是template.Template类型的一部分。

b需要使用的任何功能也必须添加到a

var probar1 = template.New("pro").Funcs(funcionIncremento)
var auxiliar1 = template.New("aux").Funcs(funcionIncremento)

auxiliar1 = template.Must(auxiliar1.Parse(`
        {{range $index, $element := .}}
            Number: {{inc $index}}
        {{end}}
`))

probar1 = template.Must(probar1.AddParseTree("test", auxiliar1.Tree))
err := probar1.ExecuteTemplate(os.Stdout, "test", &strs)
if err != nil {
    log.Println("Error1: ", err)
}