是否可以在不将其作为数据元素传递给模板的情况下访问 Golang text/html/template 中当前模板的名称?
谢谢!
我希望这就是你的意思(来自http://golang.org/pkg/text/template/#Template.Name)
func (t *Template) Name() string
“名称返回模板的名称。”
如果您打算从模板中访问模板名称,我只能考虑向 template.FuncMap 添加一个函数,或者按照您的建议将名称添加为数据元素。
第一个可能看起来像:
var t = template.Must(template.New("page.html").ParseFiles("page.html"))
t.Funcs(template.FuncMap{"name": fmt.Sprint(t.Name())})
但我无法在我弄乱它的短时间内让它工作。希望它可以帮助您指出正确的方向。
从长远来看,将名称添加为数据元素可能会更容易。
编辑:如果有人想知道如何使用 template.FuncMap 进行操作,基本上是在创建模板后定义函数,然后将其添加到 FuncMap:
完整运行示例:
func main() {
const text = "{{.Thingtype}} {{templname}}\n"
type Thing struct {
Thingtype string
}
var thinglist = []*Thing{
&Thing{"Old"},
&Thing{"New"},
&Thing{"Red"},
&Thing{"Blue"},
}
t := template.New("things")
templateName := func() string { return t.Name() }
template.Must(t.Funcs(template.FuncMap{"templname": templateName}).Parse(text))
for _, p := range thinglist {
err := t.Execute(os.Stdout, p)
if err != nil {
fmt.Println("executing template:", err)
}
}
}
输出:
Old things
New things
Red things
Blue things