我试图将值放入“标题”模板中,例如标题和导航链接,但无法访问我从包含的模板发送到主模板的变量。
渲染模板:
... templateName := "index" args := map[string]string{ "Title": "Main Page", "Body": "This is the content", } PageTemplates.ExecuteTemplate(w, templateName+".html", args) ...
index.html模板:
{{template "header"}} <-- Including the "header.html" template {{.Body}} <-- Variable that works {{template "footer"}} <-- Does not matter!
header.html模板:
{{define "header"}} <!DOCTYPE html> <html lang="en"> <head> <title>{{.Title}}</title> <-- Variable empty :( </head> <body> {{end}}
显然,它不会那样工作。
也许有一种方法可以解析/获取模板并将变量放入其中,而无需将整个头文件放入代码中?然后,我可以将该模板作为变量发送到我的主模板。但这似乎并不是最好的方法。
您可以在调用模板时将上下文传递给模板。在您的示例中,更改{{template "header"}}为{{template "header" .}}应该足够。
{{template "header"}}
{{template "header" .}}
官方文档的相关部分:
{{template“ name”}} 使用零数据执行具有指定名称的模板。 {{模板“名称”管道”}} 执行指定名称的模板,将点设置为管道的值。
{{template“ name”}} 使用零数据执行具有指定名称的模板。
{{模板“名称”管道”}} 执行指定名称的模板,将点设置为管道的值。
PS:这是不相关的问题,但你也应该删除换行符之间{{define "header"}}和<!DOCTYPE html>,使DOCTYPE是真的在你的模板中的第一件事情。
{{define "header"}}
<!DOCTYPE html>