我能找到的大多数例子都描述了非常简单/基本的东西,比如显示人物对象的属性,如下所示:
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) 我想在 golang 模板中定义变量,而不是在二进制文件中,这样就不需要重新编译。
在 Go 中,我设置了一些变量:
var animals = map[string]string{
"spirit_animal": "cat",
"spirit_predator": "dog",
}
Run Code Online (Sandbox Code Playgroud)
我用这个执行模板:t.ExecuteTemplate(w, "main", variables)它将这些变量传递给模板。
现在我想将这些变量从 go 中取出到“主”模板中。
{{$spirit_animal:="cat"}} {{$spirit_animal}}
Run Code Online (Sandbox Code Playgroud)
我这样称呼子模板:
{{ template "navbar" . }}
Run Code Online (Sandbox Code Playgroud)
问题是嵌套模板(子模板)似乎无法访问任何变量。
从文档中,“模板调用不会从其调用点继承变量。” 阅读“文本/模板”的文档,听起来变量可能无法在嵌套模板中使用。
关于如何将这些变量从二进制文件中取出并放入不需要在更改时重新编译的嵌套模板可访问的单个文本位置的任何建议?
我想在 Go HTML 模板中编写这样一个条件片段:
{{if isUserAdmin}}
<a href"/admin/nuke">Go to the big red nuclear button</a>
{{end}}
Run Code Online (Sandbox Code Playgroud)
但是,这不可能直接实现,因为模板不知道触发其执行的请求,因此无法确定用户是否是管理员。
有没有一些正常的方法可以实现这一目标?
我提前指出:
我的City结构是这样的:
type City struct {
ID int
Name string
Regions []Region
}
Run Code Online (Sandbox Code Playgroud)
而Region结构是:
type Region struct {
ID int
Name string
Shops []Destination
Masters []Master
EducationCenters []Destination
}
Run Code Online (Sandbox Code Playgroud)
主要是我尝试这样做:
tpl.ExecuteTemplate(resWriter,"cities.gohtml",CityWithSomeData)
Run Code Online (Sandbox Code Playgroud)
是否可以在模板内部做这样的事情?
{{range .}}
{{$city:=.Name}}
{{range .Regions}}
{{$region:=.Name}}
{{template "data" .Shops $city $region}}
{{end}}
{{end}}
Run Code Online (Sandbox Code Playgroud) 我有一个简单的案例,其中模板(text/templates)包括这样的另一个
`index.html`
{{ template "image_row" . }}
`image_row.html`
{{ define "image_row" }}
To stuff here
{{ end }}
Run Code Online (Sandbox Code Playgroud)
现在我想重用图像行模板.假设我想传递一个简单的数字,以便image_row模板根据此数字构建行
我想有类似的东西(其中5是附加参数)
index.html
{{ template "image_row" . | 5 }}
Run Code Online (Sandbox Code Playgroud)
在这种情况下我怎么能实现呢?