@serious911

Вложенные шаблоны Golang?

Привет. У меня есть небольшой вопрос по шаблонах в Go. Я создал базовый шаблон HTML страницы layout.html и хочу использовать его как каркас для других страниц (index.html, terms.html), но динамически подставлять другой контент. Как правильно это сделать?

layout.html:
{{ define "layout" }}
<html>
    <body>
       {{ block "content" . }}{{ end }}
    </body>
</html>
{{ end }}

на других страницах я переопределяю блок content так:
index.html:
{{ template "layout" . }}
{{ block "content" . }}
<h1>index</h1>
{{ end }}


terms.html:
{{ template "layout" . }}
{{ block "content" . }}
<h1>terms</h1>
{{ end }}

дальше в роутере генерирую страницу
router := gin.New()
router.LoadHTMLGlob("templates/*")

router.GET("/", func(context *gin.Context) {
	context.HTML(http.StatusOK, "index.html", gin.H{})
})

router.GET("/terms", func(context *gin.Context) {
	context.HTML(http.StatusOK, "terms.html", gin.H{})
})

Проблема в том, что это не работает - на всех страницах отображается один тот же текст из блока content. Роуты работают, layout подгружается, но в шаблонах не подставляется необходимый контент из блока content на разных страницах.

Спасибо
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
Резолвинг блоков выполняется в момент парсинга шаблонов, а не в момент их выполнения. У вас всё парсится в один объект, поэтому применяется тот блок, который парсился последним.
Вот здесь один из вариантов, как парсить в разные объекты *Template, чтобы организовать лэйауты.
https://hackernoon.com/golang-template-2-template-...

Но лучше воспользоваться готовыми решениями для gin, например https://github.com/foolin/gin-template
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Cryptology Москва
от 2 500 до 4 000 eur.
Effective Technologies Нижний Новгород
от 70 000 руб.
22 янв. 2019, в 00:48
60 руб./за 1000 зн.
22 янв. 2019, в 00:09
120000 руб./в месяц
21 янв. 2019, в 23:37
1000 руб./за проект