Визуализация частичного шаблона с переданными параметрами

Я знаю, что в Ruby возможен рендеринг частичного шаблона с дополнительными параметрами, как мне это сделать в Go?

У меня есть частичный шаблон _partial1.tmpl:

<div>
text1
{{if foo}}
   text2
{{end}}
</div>

используя его из родительского шаблона parent.tmpl:

<div>
  {{ template "partial1",  }} // how do I pass foo param here?? 
</div>  

Как передать параметр foo партиалу?


person WebQube    schedule 27.03.2016    source источник


Ответы (1)


В документации указано, что директива template имеет две формы:

{{template "name"}}
Шаблон с указанным именем выполняется с нулевыми данными.

{{template "name" pipeline}}
Шаблон с указанным именем выполняется с точкой, установленной в значение конвейера.

Последний принимает оператор конвейера, значение которого затем устанавливается равным значению dot в исполняемом шаблоне. Так зовет

{{template "partial1" "string1"}}

установит {{.}} в "string1" в шаблоне partial1. Таким образом, хотя нет возможности установить имя foo в партиале, вы можете передать параметры, и они появятся в .. Пример:

шаблон.html

<div>
  {{ template "partial1.html" "muh"}} // how do I pass foo param here??
</div>

частичное1.html

{{if eq . "muh"}}
blep
{{else}}
moep
{{end}}

main.go

import (
    "html/template"
    "fmt"
    "os"
)

func main() {
    t,err := template.ParseFiles("template.html", "partial1.html")

    if err != nil { panic(err) }

    fmt.Println(t.Execute(os.Stdout, nil))
}

Запуск этой программы распечатает содержимое шаблона с blep из партиала. Изменение переданного значения изменит это поведение.

Вы также можете назначать переменные, поэтому назначение . на foo возможно в частичном:

{{ $foo := . }}
person nemo    schedule 27.03.2016