使用传递的参数渲染部分模板

时间:2016-03-27 19:36:49

标签: go go-templates

我知道在Ruby中可以渲染带有附加参数的部分模板,我怎么能在Go中做到?

我有一个部分模板width

.banner-dropdown

在父模板_partial1.tmpl中使用它:

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

如何将参数parent.tmpl传递给部分?

1 个答案:

答案 0 :(得分:4)

documentation表示template指令有两种形式:

  

{{template "name"}}
  执行具有指定名称的模板   没有数据。

     

<强> {{template "name" pipeline}}
  具有指定名称的模板是   执行点设置为管道的值。

后者接受一个管道语句,然后将其值设置为执行模板中的dot值。所以打电话

{{template "partial1" "string1"}}

会在{{.}}模板中将"string1"设置为partial1。因此,虽然无法在局部中设置名称foo,但您可以传递参数,它们将显示在.中。例如:

template.html

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

partial1.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 := . }}