Используйте один и тот же шаблон с разными параметрами / переменными на 1 странице - PullRequest
1 голос
/ 19 июня 2020

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

segment.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 на странице «home» и передавать различные типы переменных в segment.tmpl? Я искал всюду и ничего не нашел, самое близкое - template.Clone, но так и не нашел его примеров.

1 Ответ

2 голосов
/ 19 июня 2020

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

{{ template "segment" .Variable1 }}

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


segment.tmpl

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

layout.tmpl

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