go - 定义顶级 Go 模板

标签 go template-engine

假设我有两个文本文件(go 模板):

child.tmpl

TEXT1 
Hello {{ . }}

top.tmpl

TEXT2
{{ template "child.tmpl" "argument"}}

child.tmpl 模板嵌套在 top.tmpl

解析它们的典型程序是:

package main

import (
    "os"
    "text/template"
)

func main() {
    t := template.Must(template.ParseFiles("child.tmpl", "top.tmpl")
    t.ExecuteTemplate(os.Stdout, "top.tmpl", nil)
}

是否有任何方法可以使用 {{ 传递要嵌入到顶级模板中的模板作为参数。 }} 符号? 类似于 {{ template {{.}} "argument"}}

  • 更一般地说,定义布局模板的最佳方法是什么,以便我可以将其像顶级模板一样用于多个子模板?

最佳答案

有两种公认的方法可以解决您的问题:

第一个涉及编写您自己的模板包含函数并将其注册为 template.FuncMap通过 template.Funcs 使用您的模板.

另一种方法是在您的子模板中使用{{define xxx}} block 。然后您可以有两个定义相同模板的不同文件:

  • file1.html: {{定义正文}}...{{end}}
  • file2.html:{{定义正文}}...{{end}}

根据您的需要解析正确的文件,并在您的模板中执行{{template body "argument"}}

我认为第一种选择更灵活。

关于go - 定义顶级 Go 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946533/

相关文章:

java - 将 JSON 对象传递给 Rythm 模板

java - 动态加载模板文件到 Rythm? (无需目录设置)

template-engine - 如何在 mustache 模板中引用包含点的字段名称?

go - sqlx structscan 连接查询

regex - 使用 Golang 正则表达式查找一个整数后跟一个字符串

go - 在Go中将文件从本地文件夹移动到s3存储桶

javascript - 如何在 Handlebars 模板中的单选按钮组中设置所选项目?

go - 位移 << 和乘法 * 优先级

time.Ticker 的性能

javascript - 更改模板标签后 John Resig 的微模板出现语法错误 <# {% {{ 等