templates - FuncMap 的多个模板

标签 templates text go

目标:在我想将换行符更改为 <br/> 的 HTTP 服务器中使用多个模板一些字符串上的标签。

一个精简的例子:

我有两个模板 a.tmplb.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不知道。

  1. 如何在多个模板中使用我的函数?是this question here on so的答案唯一的出路?
  2. 这是正确的方法吗?请记住,我想更改某些字符串上的文本,类似于文档中的标题示例(http://golang.org/pkg/text/template/#FuncMap - 示例 (Func))?
  3. 我如何访问 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/

相关文章:

r - 转换已解析字符串的编码

object - Powershell - 将文本字段转换为对象

c++ - 奇怪的 GCC 错误 : expected primary-expression before ',' token

c++ - 多个参数包——如何?

javascript - 我什么时候需要 document.getElementByID 的引号?

intellij-idea - 如何使用 IntelliJ 编译 Google Go bin

unit-testing - 如何在导入包中重用测试代码?

json - 如何在 golang 中使用 Unmarshal 从 json 文档中获取结构中的 json 字符串

c++ - 普通模板在哪里结束,元模板从哪里开始?

api - Angular2 - Nebular 主题 API 端点