douju8113 2019-01-01 15:22
浏览 190

如何在嵌套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

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥100 求数学坐标画圆以及直线的算法
    • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
    • ¥15 名为“Product”的列已属于此 DataTable
    • ¥15 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 自己瞎改改,结果现在又运行不了了
    • ¥15 链式存储应该如何解决
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站