2013-05-11 104 views

回答

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

+0

谢谢。是的,这就是我的意思。是的,我看到了文档中的Name()函数,但是想知道是否可以访问而不诉诸FuncMaps /传递它。我现在将它作为数据元素传递,再次感谢! – rebnoob 2013-05-14 15:32:55

+0

嗨,我已经更新了我的答案,如何使用FuncMap的完整运行示例。 我对你的问题很感兴趣,_really_想要解决它:-) – Intermernet 2013-05-15 14:21:56

+0

很酷,谢谢你的队友! – rebnoob 2013-05-16 20:52:49