获取当前模板名称?

时间:2013-05-11 18:49:28

标签: templates go

是否可以在Golang text / html / template中访问当前模板的名称而不将其作为数据元素传递给模板?

谢谢!

1 个答案:

答案 0 :(得分:3)

我希望这就是你的意思(来自http://golang.org/pkg/text/template/#Template.Name

func (t *Template) Name() string

“名称返回模板的名称。”

如果您想从 模板中访问模板名称,我只能想到将函数添加到template.FuncMap,或者,如您所建议的那样将名称添加为数据元件。

第一个可能看起来像:

var t = template.Must(template.New("page.html").ParseFiles("page.html"))
t.Funcs(template.FuncMap{"name": fmt.Sprint(t.Name())})

但我无法让它在我用它搞砸的快速时间内工作。希望它可以帮助您指明正确的方向。

从长远来看,将名称添加为数据元素可能会更容易。

编辑:如果有人想知道如何使用template.FuncMap,它基本上是在创建模板后定义函数,然后将其添加到FuncMap:

完整运行示例:

func main() {

    const text = "{{.Thingtype}} {{templname}}\n"

    type Thing struct {
        Thingtype string
    }

    var thinglist = []*Thing{
        &Thing{"Old"},
        &Thing{"New"},
        &Thing{"Red"},
        &Thing{"Blue"},
    }

    t := template.New("things")

    templateName := func() string { return t.Name() }

    template.Must(t.Funcs(template.FuncMap{"templname": templateName}).Parse(text)) 

    for _, p := range thinglist {
        err := t.Execute(os.Stdout, p)
        if err != nil {
            fmt.Println("executing template:", err)
        }
    }
}

输出:

Old things
New things
Red things
Blue things

游乐场链接:http://play.golang.org/p/VAg5Gv5hCg