目标:在我想将换行符更改为 <br/>
的 HTTP 服务器中使用多个模板一些字符串上的标签。
一个精简的例子:
我有两个模板 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) }
最佳答案
你的最后一段代码在我看来是正确的。
要渲染 b.tmpl,只需调用
t.ExecuteTemplate(w, "b.tmpl", data)
你可以用同样的方式访问a.tmpl;我建议这样做是为了保持一致性,而不是在调用 New 时将名称设置为“a.tmpl”。
关于templates - FuncMap 的多个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209236/