目标:在HTTP服务器中使用多个模板,我想在某些字符串上将换行符更改为<br/>
标记。
一个精简的例子:
我有两个模板a.tmpl
和b.tmpl
,如下所示:
Template a {{dosomething}}
(和其他模板类似)。两者都驻留在名为templates
的目录中。我相信我需要创建一个函数来执行\n
- &gt; <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
是未知的。
如何在以下代码中访问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)
}
答案 0 :(得分:3)
您的最后一段代码看起来对我而言。
要渲染b.tmpl,只需调用
即可t.ExecuteTemplate(w, "b.tmpl", data)
你可以用同样的方式访问a.tmpl;我建议这样做是为了保持一致性,而不是在调用New时将名称设置为“a.tmpl”。