无法显示 html 中的结构切片
Unable to display slice of structs in html
我正在做一个项目,需要我检索数据并将其显示在 html。
数据被存储并作为结构切片传递给html。
数据由不同的字段组成(例如名称、温度、湿度...)
数据检索部分正在工作(我已通过打印出来并在我的 html 上显示 Go 切片来确认)。
但是,我想要实现的是根据字段在 table 中正确显示数据。我附上了我的代码,但没有任何输出。我找不到错误。
请帮我解决这个问题。谢谢
*P.S 所有 names/labels 都拼写正确。
这是代码:
<div style="overflow:auto;">
{{if .}}
<table class="table table-striped">
<thead>
<tr style="text-align: center;">
<th scope="col">Time</th>
<th scope="col">Name</th>
<th scope="col">Temperature</th>
<th scope="col">Humidity</th>
<th scope="col">Ambient</th>
<th scope="col">Red</th>
<th scope="col">Green</th>
<th scope="col">Blue</th>
</tr>
</thead>
<tbody>
{{range .}}
<tr style="text-align: center;">
<td>{{.time_added}}</td>
<td>{{.name}}</td>
<td>{{.temperature }}</td>
<td>{{.humidity }}</td>
<td>{{.ambient }}</td>
<td>{{.red }}</td>
<td>{{.green}}</td>
<td>{{.blue}}</td>
</tr>
{{end}}
</tbody>
</table>
{{else}}
<h1 style="font-size: 3vh;margin-top:10vh;">No data available</h1>
{{end}}
</div>
问题很可能是您通过小写名称引用结构的字段。在 Go 中,小写字母是私有的,因此模板引擎无法看到它们。
这是一个简单的工作示例:
主要包
import (
`html/template`
`os`
)
var T = template.Must(template.New(``).Parse(`
{{if .}}
<table class="table table-striped">
<thead>
<tr style="text-align: center;">
<th scope="col">Time</th>
<th scope="col">Name</th>
</tr>
</thead>
<tbody>
{{range .}}
<tr style="text-align: center;">
<td>{{.Time_Added}}</td>
<td>{{.Name}}</td>
</tr>
{{end}}
</tbody>
</table>
{{else}}
<h1 style="font-size: 3vh;margin-top:10vh;">No data available</h1>
{{end}}
`))
type S struct {
Time_Added string
Name string
}
func main() {
data := []*S{
&S{"today","fred"}, &S{"yesterday","joe"},
}
if err := T.Execute(os.Stdout, data); nil!=err {
panic(err)
}
}
如果改成.time_added
或.name
,会报错。所以一定要检查来自 T.Execute
.
的错误
我正在做一个项目,需要我检索数据并将其显示在 html。
数据被存储并作为结构切片传递给html。
数据由不同的字段组成(例如名称、温度、湿度...) 数据检索部分正在工作(我已通过打印出来并在我的 html 上显示 Go 切片来确认)。 但是,我想要实现的是根据字段在 table 中正确显示数据。我附上了我的代码,但没有任何输出。我找不到错误。
请帮我解决这个问题。谢谢
*P.S 所有 names/labels 都拼写正确。
这是代码:
<div style="overflow:auto;">
{{if .}}
<table class="table table-striped">
<thead>
<tr style="text-align: center;">
<th scope="col">Time</th>
<th scope="col">Name</th>
<th scope="col">Temperature</th>
<th scope="col">Humidity</th>
<th scope="col">Ambient</th>
<th scope="col">Red</th>
<th scope="col">Green</th>
<th scope="col">Blue</th>
</tr>
</thead>
<tbody>
{{range .}}
<tr style="text-align: center;">
<td>{{.time_added}}</td>
<td>{{.name}}</td>
<td>{{.temperature }}</td>
<td>{{.humidity }}</td>
<td>{{.ambient }}</td>
<td>{{.red }}</td>
<td>{{.green}}</td>
<td>{{.blue}}</td>
</tr>
{{end}}
</tbody>
</table>
{{else}}
<h1 style="font-size: 3vh;margin-top:10vh;">No data available</h1>
{{end}}
</div>
问题很可能是您通过小写名称引用结构的字段。在 Go 中,小写字母是私有的,因此模板引擎无法看到它们。
这是一个简单的工作示例:
主要包
import (
`html/template`
`os`
)
var T = template.Must(template.New(``).Parse(`
{{if .}}
<table class="table table-striped">
<thead>
<tr style="text-align: center;">
<th scope="col">Time</th>
<th scope="col">Name</th>
</tr>
</thead>
<tbody>
{{range .}}
<tr style="text-align: center;">
<td>{{.Time_Added}}</td>
<td>{{.Name}}</td>
</tr>
{{end}}
</tbody>
</table>
{{else}}
<h1 style="font-size: 3vh;margin-top:10vh;">No data available</h1>
{{end}}
`))
type S struct {
Time_Added string
Name string
}
func main() {
data := []*S{
&S{"today","fred"}, &S{"yesterday","joe"},
}
if err := T.Execute(os.Stdout, data); nil!=err {
panic(err)
}
}
如果改成.time_added
或.name
,会报错。所以一定要检查来自 T.Execute
.