Есть код на го :
func Render(templateName string, data interface{}) string {
var templateDir = config.EmailNotice.TemplatesDir
tmpl := template.New(templateName)
tmpl, err = tmpl.ParseFiles(
templateDir + `emails/` + templateName,
templateDir + `header.html`,
templateDir + `footer.html`,
)
if err != nil {
log.Println(err)
}
var tpl bytes.Buffer
if err := tmpl.Execute(&tpl, data); err != nil {
log.Println(err)
}
return tpl.String()
}
Который парсит три шаблона
header:
{{ define "header" }}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
{{ $site := "example.com" }}
{{ if ne .user.Site "" }}
{{ $site := .user.Site }}
{{ end }}
<div>
<h1>
<a href="{{ $site }}">
<img src="/assets/images/logo.png" alt="logo"/>
</a>
</h1>
</div>
{{ end }}
body:{{ template "header" }}
<h1>Test</h1>
{{ template "footer"}}
footer:{{ define "footer"}}
its footer
</div>
</body>
</html>
{{ end }}
Я передаю данные, которые хочу использовать в уже отрендеренном шаблоне, но го паникует :
template: header.html:11:6: executing "header" at <ne .user.Site "">: error calling ne: invalid type for comparison
Но если этот кусок :
{{ $site := "example.com" }}
{{ if ne .user.Site "" }}
{{ $site := .user.Site }}
{{ end }}
<div>
<h1>
<a href="{{ $site }}">
<img src="/assets/images/logo.png" alt="logo"/>
</a>
</h1>
</div>
Перенести в шаблон body, то все работает. Но это как - то не правильно.
Что я делаю не так ?
Уже много всего почитал, но везде только примеры того, как использовать данные только в одном шаблоне