我正在尝试将值放入“标题”模板,例如标题和导航链接,但无法访问我从包含的模板发送到主模板的变量。
渲染模板:
...
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}}
显然,它不会那样工作。
也许有一种方法可以解析/获取模板并将我的变量放入其中而无需将整个头文件放入代码中?然后我可以将该模板作为变量发送到我的主模板。但这似乎不是最佳方式。
答案 0 :(得分:3)
您可以在调用时将上下文传递给模板。在您的示例中,将{{template "header"}}
更改为{{template "header" .}}
就足够了。
official docs的相关部分:
{{template&#34; name&#34;}}
具有指定名称的模板使用nil数据执行。{{template&#34; name&#34;管道}}
具有指定名称的模板将使用设置为管道值的点执行。
PS:与问题无关,但您还应删除{{define "header"}}
和<!DOCTYPE html>
之间的换行符,以便doctype真的是您模板中的第一件事。