我有一个网页,其中包含一个layout.html和一个content.html。两者都包含对用于翻译字符串的自定义函数的调用。
当我调用template.ParseFiles时,内容包含在布局中并被提供,但是只有layout.html中的字符串才被翻译,而content.html中的字符串消失。
当我使用单个html文件时,此方法工作正常,但无法将其用于嵌套文件。
main.go
func executeMultiTmpl(w http.ResponseWriter, r *http.Request) {
funcMap := template.FuncMap{
"index": lookup,
}
tmpl, err := template.New("example.html").Funcs(funcMap).ParseFiles(
"dev/html/example/layout.html",
"dev/html/example/content.html",
)
var tpl bytes.Buffer
err = tmpl.Execute(&tpl ,Translation)
if err != nil {
panic(err)
}
}
layout.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example Title - {{index . "About"}}</title>
</head>
<body>
{{ template "content.html" }}
</body>
</html>
content.html
<h2>{{index . "Some headline"}}</h2>
content.html文件嵌套在layout.html内部。之后,函数 lookup 会收到地图 Translation ,并转换layout.html文件中所有由{{index包围的字符串。 }}。不幸的是,文件content.html中的字符串没有被翻译。
我知道调用了功能 lookup ,但是它收到一个空的 Translation 地图。
当我删除自定义函数并使用标准的 index 函数运行它时,我会感到恐慌:在以下位置执行“ content.html”:错误调用索引:无类型nil的索引