为了账号安全,请及时绑定邮箱和手机立即绑定

带有 FuncMap 的多个模板

带有 FuncMap 的多个模板

Go
子衿沉夜 2021-06-04 13:18:36
目标:在 HTTP 服务器中使用多个模板,我想将换行符更改为<br/>某些字符串上的标签。一个精简的例子:我有两个模板a.tmpl,b.tmpl它们看起来像这样:Template a {{dosomething}}(和其他模板类似)。两者都驻留在名为templates. 我相信我需要创建一个函数来执行\n-><br />替换(dosomething上面)。这是我的(非工作)示例代码:package mainimport (    "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 definedexit status 1这是有道理的,因为在解析期间,函数dosomething是未知的。如何在多个模板中使用我的函数?这个问题的答案就在这里,所以是唯一的出路吗?这是正确的方法吗?请记住,我想更改某些字符串上的文本,类似于文档中的标题示例(http://golang.org/pkg/text/template/#FuncMap - Example (Func))?我如何b.tmpl在以下代码中访问:package mainimport (    "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)}
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

你的最后一段代码在我看来是正确的。

要渲染 b.tmpl,只需调用

t.ExecuteTemplate(w, "b.tmpl", data)

您可以通过同样的方式访问 a.tmpl;我建议这样做以保持一致性,而不是在调用 New 时将名称设置为“a.tmpl”。


查看完整回答
反对 回复 2021-06-07
  • 1 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信