Templates 具有FuncMap的多个模板
目标是:在HTTP服务器中使用多个模板,我想在其中将一些字符串上的换行符更改为Templates 具有FuncMap的多个模板,templates,text,go,Templates,Text,Go,目标是:在HTTP服务器中使用多个模板,我想在其中将一些字符串上的换行符更改为标记 一个简单的例子: 我有两个模板a.tmpl和b.tmpl,如下所示: Template a {{dosomething}} (与其他模板类似)。两者都位于一个名为templates的目录中。我相信我需要创建一个函数来执行\n->替换(上面的dosomething) 这是我的(非工作)示例代码: package main import ( "log" "text/template" ) fun
标记
一个简单的例子:
我有两个模板a.tmpl
和b.tmpl
,如下所示:
Template a {{dosomething}}
(与其他模板类似)。两者都位于一个名为templates
的目录中。我相信我需要创建一个函数来执行\n
->
替换(上面的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
是未知的
b.tmpl
:
你的最后一段代码对我来说很合适 要呈现b.tmpl,只需调用
t.ExecuteTemplate(w, "b.tmpl", data)
您可以用同样的方法访问a.tmpl;为了保持一致性,我建议您这样做,而不是在调用New时将名称设置为“a.tmpl”。我不太理解您答案的第二部分-如何以相同的方式访问
a.tmpl
。我需要调用Funcs(funcMap)
类似于“介于”一个新的和ParseGlob(…)
@topkip之间的东西。我的意思是,您应该通过调用t.ExecuteTemplate(w,“a.tmpl”,data)而不是调用t.Execute(w,data)来呈现模板。这样,两个模板将被同等对待。然后,您可以给所有模板集起一个比“a.tmpl”更好的名称。这就是我现在拥有的:t,err:=template.New(“”.Funcs(funcMap).ParseGlob(“templates/*.tmpl”)
然后t.ExecuteTemplate(os.Stdout,“b.tmpl”,“hello”)
-这很好用。与其他模板相同。谢谢谢谢,将Funcs应用于多个模板在任何地方都没有用模板记录。新的是,您只需创建一个基本模板—一个容纳其他模板的容器。所以,对了,名字并不重要。我做模板。新建(“根”)
。
t.ExecuteTemplate(w, "b.tmpl", data)