2014-11-24 127 views
3

帶分隔符使用模板使用template.New("...").Delims("[[", "]]").Parse() 時,但是工作得很好,我無法弄清楚如何獲得相同的結果與template.ParseFiles()Golang HTML /模板:自定義ParseFiles Delims

tmpl, err := template.ParseFiles("base.tmpl", "homepage/inner.tmpl") 
if err != nil { panic(err) } 
tmpl.Delims("[[", "]]") 
p := new(Page) 
err = tmpl.Execute(os.Stdout, p) 
if err != nil { panic(err) } 

我沒有錯誤,但分隔符不會更改。

tmpl, err := template.ParseFiles("base.tmpl", "homepage/inner.tmpl") 
t := tmpl.Lookup("base.tmpl").Delims("[[", "]]") 
p := new(Page) 
err = t.Execute(os.Stdout, p) 
if err != nil { panic(err) } 

這導致了相同的結果。

如果這是相關的,我的需要是在我的網站的特定頁面中嵌入一個小角度的應用程序。

另外,我有一個普通的HTML結構,我與ParseFiles()特定的頁面模板結合了基本模板,導致這種佈局:

/templates/base.tmpl 
/templates/homepage/inner.tmpl 
/templates/otherpage/inner.tmpl 

這是可能的呢?如果是這樣,我做錯了什麼?

+1

的初期,API變得更有意義它看起來應該能夠執行'template.New(...).Deims(...).ParseFiles(。 ..)'從[文檔](http://golang.org/pkg/html/template/#Template.ParseFiles)。這是索引中的第二個ParseFiles,不是第一個。 – twotwotwo 2014-11-24 22:20:53

+1

確實!儘管我已經研究了很長一段時間,但在發佈問題後我想了一會兒。我發現很難將這個包裹在頭上:)感謝您的幫助! – 2014-11-24 22:32:58

+1

對於未來的讀者,我缺乏的另一個細節是我需要始終使用template.New(「base.tmpl」)爲任何頁面命名模板「base.tmpl」。我想這是因爲它是在解析模板集中使用的根模板的名稱。 – 2014-11-24 22:45:28

回答

5

創建一個虛擬模板,設置分隔符,然後解析文件:

tmpl, err := template.New("").Delims("[[", "]]").ParseFiles("base.tmpl", "homepage/inner.tmpl") 

API的這一方面是古怪的,不是很明顯。在模板包有額外設置類型

+1

其他注意事項:template.New()的Blank參數導致運行時恐慌。將template.New(「」)替換爲template.New(「some_template_name」) – codefreak 2015-05-31 15:59:50

+1

不僅@codefreak說了什麼,而且還必須使用給定的名稱調用ExecuteTemplate。調用只是執行會給你一個無指針解引用恐慌。 – THUNDERGROOVE 2015-06-17 20:55:02