如何在嵌套的golang模板中使用自定义函数?

时间:2019-01-01 15:22:26

标签: templates go

我有一个网页,其中包含一个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的索引

0 个答案:

没有答案