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

I have a webpage consisting of one layout.html and one content.html. Both contain calls to a custom function for translating strings.

When I call template.ParseFiles, the content is included into the layout and is served, but only strings in layout.html are translated while the strings from content.html disappear.

This works fine when I use single html files, but I can't get it work with nested files.

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>

The file content.html is nested inside of layout.html. Afterwards the function lookup receives a map Translation and translates all strings in the layout.html file which are surrounded by {{index . }}. Unfortunately, the strings in the file content.html are not translated.

I know the function lookup is called, but it receives an empty Translation map.

When I remove the custom function and run it with the standard index function, I get a panic: executing "content.html" at : error calling index: index of untyped nil

douzhang1364
douzhang1364 奇迹般有效。我想我并不大声赞成你,但谢谢你:)
一年多之前 回复
dougan7523
dougan7523 您没有将任何内容传递给内容模板。{{模板“content.html”。}}<-看到圆点了吗?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐