Используйте один и тот же шаблон с разными параметрами/переменными на 1 странице.

Я использую Go gin gonic для своего веб-приложения. Как использовать один и тот же файл шаблона несколько раз на одной странице с разными переменными, переданными в шаблон.

сегмент.tmpl

{{ define "segment" }}
    <div>{{ .Variable }}</div>
{{ end }}

layout.tmpl

<!DOCTYPE HTML>
<html>
<body>
    {{ template "segment . }} #with a variable 1
    {{ template "segment . }} #with different variable
    {{ template "segment . }} #another same template with another 
</body>
</html>

main.go

r.GET("/home/", func(c *gin.Context) {  
    tmpl := template.Must(template.ParseFiles("templates/layout.tmpl", "templates/product_add.tmpl", "templates/segment.tmpl")
    r.SetHTMLTemplate(tmpl)
    c.HTML(200, "layout", gin.H {
        "Variable1": "var1",
        "variable2": "var2",
    })
}

Как мне использовать segment.tmpl несколько раз на «домашней» странице и передавать различные типы переменных в segment.tmpl? Я искал везде и ничего не нашел, ближе всего это template.Clone, но так и не смог найти ни одного примера.


person Charas    schedule 19.06.2020    source источник
comment
{{ template "segment" .Variable1 }}, а затем в сегменте просто выполните {{ . }}, чтобы получить значение Variable1.   -  person mkopriva    schedule 19.06.2020
comment
Вау, большое спасибо, именно то, что мне было нужно, извините, только что перешли на Go. Пожалуйста, напишите это как ответ, я приму это как ответ. Спасибо.   -  person Charas    schedule 19.06.2020


Ответы (1)


Вы можете передать любое значение в качестве «конвейера» в шаблон, это не обязательно должна быть «точка», т.е. вы можете передать результат вызова функции или, в данном случае, результат доступа к значению карты .

{{ template "segment" .Variable1 }}

а затем внутри шаблона "segment" вы можете обратиться к конвейеру с помощью точки, то есть {{ . }}.


сегмент.tmpl

{{ define "segment" }}
    <div>{{ . }}</div>
{{ end }}

layout.tmpl

<!DOCTYPE HTML>
<html>
<body>
    {{ template "segment .Variable1 }}
    {{ template "segment .Variable2 }}
    {{ template "segment .AnotherVariable }}
</body>
</html>
person mkopriva    schedule 19.06.2020