Templates 具有FuncMap的多个模板

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

目标是:在HTTP服务器中使用多个模板,我想在其中将一些字符串上的换行符更改为

标记

一个简单的例子:

我有两个模板
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
是未知的

  • 如何在多个模板中使用我的函数?答案是唯一的出路吗
  • 这是正确的方法吗?记住,我想更改某些字符串上的文本,类似于文档中的标题示例(-example(Func))
  • 如何在以下代码中访问
    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)