2013-05-11 110 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