4
目標:在HTTP服務器中使用多個模板,我想在某些字符串上將換行符更改爲<br/>
標記。具有FuncMap的多個模板
一個精簡例如:
我有兩個模板a.tmpl
和b.tmpl
這是這樣的:
Template a {{dosomething}}
(以及類似的其他模板)。兩者都位於名爲templates
的目錄中。我相信我需要創建一個函數來做\n
- ><br />
替換(上面的dosomething
)。
這是我的(非工作)的示例代碼:
package main
import (
"log"
"text/template"
)
func main() {
// funcMap := template.FuncMap{
// "dosomething": func() string { return "done something" },
// }
templates, err := template.ParseGlob("templates/*.tmpl")
if err != nil {
log.Fatal(err)
}
log.Printf("%#v", templates)
}
的錯誤信息是:
2013/03/04 20:08:19 template: a.tmpl:1: function "dosomething" not defined
exit status 1
這是有意義的,因爲在分析時間,函數dosomething
是未知的。
- 如何在多個模板中使用我的功能?是否需要this question here on so的答案?
- 這是正確的方法嗎?請記住,我想更改某些字符串上的文本,類似於文檔中的標題示例(http://golang.org/pkg/text/template/#FuncMap - 示例(Func))?
如何在下面的代碼訪問
b.tmpl
:package main import ( "log" "text/template" ) func main() { funcMap := template.FuncMap{ "dosomething": func() string { return "done something" }, } t, err := template.New("a.tmpl").Funcs(funcMap).ParseGlob("templates/*.tmpl") if err != nil { log.Fatal(err) } log.Printf("%#v", t) }
我不太理解你答案的第二部分 - 如何以同樣的方式訪問'a.tmpl'。我需要調用'Funcs(funcMap)'類似於「inbetween」一個新的和'ParseGlob(...)' – topskip 2013-03-04 21:29:04
@topskip我的意思是你應該通過調用t.ExecuteTemplate(w,「a.tmpl」 ,數據)而不是通過調用t.Execute(w,data)。這樣,這兩個模板被平等對待。然後,您可以將所有模板的集合命名爲「a.tmpl」。 – andybalholm 2013-03-04 22:57:00
這就是我現在擁有的:'t,err:= template.New(「」)。Funcs(funcMap).ParseGlob(「templates/*。tmpl」)'然後't.ExecuteTemplate(os.Stdout,「 b.tmpl「,」你好「) - 這工作正常。與其他模板相同。謝謝! – topskip 2013-03-05 09:29:41