无法显示 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.

的错误