Как я могу использовать пользовательскую функцию в шаблоне вложенного Голанга? - PullRequest
0 голосов
/ 01 января 2019

У меня есть веб-страница, состоящая из одного 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» в: ошибка вызова index: индекс нетипизированного nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...