Go 模板 post 处理:可能吗?
Go template post processing: is it possible?
在我的模板中,我使用了一个生成一段输出的子模板。
但是必须移动模板输出(因为输出是 YAML 格式)。
是否有可能 post-process 模板输出?
{{ template "subtemplate" | indent 10 }}
本文indent 10
纯属虚构,只是为了说明我所需要的。
可以(如@icza 建议的那样)保存输出
进入一个变量,然后使用它,
但也许有更好、更优雅的方法?
{{$var := execTempl "subtemplate"}}
{{$var}}
最接近 {{ template "subtemplate" | indent 10 }}
的方法是定义一个函数来解析和执行 subtemplate
并将结果作为字符串输出。
var externalTemplates = map[string]*template.Template{
"subtemplate": template.Must(template.New("subtemplate").Parse(sub_template)),
}
// Executes external template, must be registered with FuncMap in the main template.
func xtemplate(name string) (string, error) {
var b bytes.Buffer
if err := externalTemplates[name].ExecuteTemplate(&b, name, nil); err != nil {
return "", err
}
return b.String(), nil
}
t := template.Must(template.New("t").Funcs(template.FuncMap{
"xtemplate": xtemplate, // register func
}).Parse(main_template))
在主模板中,您可以使用如下函数:
{{ xtemplate "subtemplate" | indent 10 }}
在我的模板中,我使用了一个生成一段输出的子模板。 但是必须移动模板输出(因为输出是 YAML 格式)。 是否有可能 post-process 模板输出?
{{ template "subtemplate" | indent 10 }}
本文indent 10
纯属虚构,只是为了说明我所需要的。
可以(如@icza 建议的那样)保存输出 进入一个变量,然后使用它, 但也许有更好、更优雅的方法?
{{$var := execTempl "subtemplate"}}
{{$var}}
最接近 {{ template "subtemplate" | indent 10 }}
的方法是定义一个函数来解析和执行 subtemplate
并将结果作为字符串输出。
var externalTemplates = map[string]*template.Template{
"subtemplate": template.Must(template.New("subtemplate").Parse(sub_template)),
}
// Executes external template, must be registered with FuncMap in the main template.
func xtemplate(name string) (string, error) {
var b bytes.Buffer
if err := externalTemplates[name].ExecuteTemplate(&b, name, nil); err != nil {
return "", err
}
return b.String(), nil
}
t := template.Must(template.New("t").Funcs(template.FuncMap{
"xtemplate": xtemplate, // register func
}).Parse(main_template))
在主模板中,您可以使用如下函数:
{{ xtemplate "subtemplate" | indent 10 }}