如何传递多个对象去模板?

Jac*_*cob 9 templates go

我能找到的大多数例子都描述了非常简单/基本的东西,比如显示人物对象的属性,如下所示:

The name is {{.Name}}. The age is {{.Age}}.
Run Code Online (Sandbox Code Playgroud)

如果你有一个更复杂的网页会发生什么,例如,多个不同的对象和对象列表,即你如何做这样的事情:

{{p.Name}} is aged {{p.Age}}. 
Outstanding invoices {{invoices.Count}} 

<table>
<tr><td>{{invoices[0].number}}</td></tr>
.... etc...
Run Code Online (Sandbox Code Playgroud)

Ric*_*ith 7

您可以声明并传入一个匿名结构,如下所示:

templ.Execute(file, struct {
    Age int
    Name string
}{42, "Dolphin"})
Run Code Online (Sandbox Code Playgroud)

并访问变量,如:

{{.Age}}, {{.Name}}
Run Code Online (Sandbox Code Playgroud)

虽然这仍然需要你制作一个结构,但它是最简洁的方法之一.你必须决定它是否对你来说太难看了;)


Pau*_*kin 5

你可以把你的更复杂的数据结构到,并通过它就像你Name和Age.例如,

type vars struct {
    P User
    Invoices []Invoice
}

type User struct {
    Name string
    Age int
}

type Invoice {
    Number int
    Description string
}
Run Code Online (Sandbox Code Playgroud)

如果将实例传递vars给模板执行,则可以使用点和数组索引来引用子结构,就像在常规go代码中一样.

{{.P.Name}}, {{.P.Age}}, {{.Invoices[0].Number}}
Run Code Online (Sandbox Code Playgroud)

  • @Jacob你不需要结构.你也可以使用`map [string] interface {}`. (2认同)