@lanzert
Программист, Руководитель проектов

Go HTML Template: как выводить значения переменных во вложенные шаблоны?

Использую шаблоны в Go, вложенные один в другой. Использую переменные в обоих шаблонах. В корневом шаблоне значения подставляются, во вложенном - нет. Что делаю не так?

Корневой шаблон (main_container.tpl):
<!DOCTYPE html>
<html>
	<head>
		<title>{{ .Title}}</title>
	</head>
	<body>
		<header>
			<div id="logo"></div>
		</header>
		<main>
			{{template "content"}}
		</main>
	</body>
</html>


Вложенный шаблон (index.tpl):
{{define "content"}}
<div class="categories_select">
	<ul>
		{{range .Categories}}
			<li>{{ .Name}}</li>
		{{end}}
	</ul>
</div>
{{end}}


Часть кода, который парсит и выводит шаблон:

t, err := template.ParseFiles("templates/main_container.tpl", "templates/index.tpl")
		log.Println("Template: ", t.Tree)
		if err != nil {
			log.Println("Template err: ", err.Error())
		} else {
			err = t.Execute(w, templates.GetIndexData())
			if err != nil {
				log.Println("Template execute err: ", err.Error())
			}
		}


Результат:

<!DOCTYPE html>
<html>
	<head>
		<title>Vitima - Главная</title>
	</head>
	<body>
		<header>
			<div id="logo"></div>
		</header>
		<main>
			
<div class="categories_select">
	<ul>
	</ul>
</div>

		</main>
	</body>
</html>


Видно, что значение для {{ .Title}} подставилось. А значение для {{ .Name}} во вложенном шаблоне не подставилось. Хотя, когда все это было в одном шаблоне - работало, как часы.
  • Вопрос задан
  • 1578 просмотров
Решения вопроса 1
Вы не передаёте данные во вложенный шаблон, надо вот так, например:
{{template "content" .}}

Если хотите передать внутрь только категории, можете сделать так:
{{template "content" .Categories}}
Но тогда и итерироваться по ним нужно будет по-другому:
{{range .}}
    <li>{{ .Name}}</li>
{{end}}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 12:20
15000 руб./за проект
25 апр. 2024, в 12:08
300 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект