Go语言 在html/templates中访问结构切片的数据

6ojccjat  于 2023-01-18  发布在  Go
关注(0)|答案(1)|浏览(127)

我正在建立一个论坛的学习目的,我需要在索引中显示可用的论坛。我有一个类型的论坛:

type Forum struct {
Id         int
Name       string
Descr      string
Visibility int
}

我有一个Get_Forums函数,它从数据库返回一个structs类型forum的切片:

func Get_Forums() []Forum {
db := Dbconnect()
var forums []Forum

rows, err := db.Query("SELECT * FROM forums")
if err != nil {
    fmt.Println(err)
}
defer rows.Close()
for rows.Next() {
    var id int
    var name string
    var descr string
    var visibility int
    err = rows.Scan(&id, &name, &descr, &visibility)
    forums = append(forums, Forum{Id: id, Name: name, Descr: descr, Visibility: visibility})
    if err != nil {
        fmt.Println(err)
    }
}

err = rows.Err()
if err != nil {
    fmt.Println(err)
}

return forums
}

现在我的问题来了,我知道你通常在这里使用一个范围,但与一个范围所有的数据将显示一个声明(对吗?),例如:

{{range .}}
{{.Id}}{{.Name}}{{.Descr}}{{.Visibility}}
{{end}}

将返回:

Id_1 Name_1 Desc_1 Visibility_1
Id_2 Name_2 Desc_2 Visibility_2

但我需要在页面的不同部分显示它,因为我需要在html中插入数据。例如:

<table border="2" cellspacing="15" cellpadding="15" align="center">
<thead>
<tr>
<th>Forum</th>
<th>Stats</th>
<th>Last Messages</th>
</tr>
</thead>
<tbody>
<tr>
 <td><a href="/sID={{.Id}}">{{.Name}}<br></a>{{.Descr}}</td> <!-- Here I need the first struct values -->
<td>BBBBBB</td>
<td>BBBBBB</td>
</tr>
</tbody>
</table>

<br><br><br>

  <table border="2" cellspacing="15" cellpadding="15" align="center">
  <thead>
  <tr>
    <th>Forum</th>
    <th>Statistiche</th>
    <th>Ultimo Messaggio</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td><a href="/sID={{.Id}}">{{.Name}}<br></a>{{.Descr}}</td> <!-- Here I need the second struct values -->
  <td>AAAAA</td>
  <td>AAAAAA</td>
  </tr>
  </tbody>
  </table>
  </div>

编辑:针对@jasonohlmsted

<body>
  {{with index . 0}}
  <!-- Here I show the first struct values -->
  <a href="/sID={{.Id}}">{{.Name}}<br></a>{{.Descr}}</td>
  {{end}}

  {{with index . 1}}
  <!-- Here I show the second struct values -->
  <a href="/sID={{.Id}}">{{.Name}}<br></a>{{.Descr}}
  {{end}}
  </body>


func index(w http.ResponseWriter, r *http.Request) {
var forums []Forum
forums = append(forums, Forum{1, "sez1", "desc1"})
forums = append(forums, Forum{2, "sez2", "desc2"})
tpl.ExecuteTemplate(w, "index.html", forums)
}

type Forum struct {
Id   int
Name string
Descr string
}

第一个索引工作正常,但第二个不显示

jecbmhm3

jecbmhm31#

使用内置索引函数索引到切片中:

...
{{with index . 0}}
    <!-- Here I show the first struct values -->
    <td><a href="/sID={{.Id}}">{{.Name}}<br></a>{{.Descr}}</td>
{{end}}
...
{{with index . 1}}
    <!-- Here I show the second struct values -->
    <td><a href="/sID={{.Id}}">{{.Name}}<br></a>{{.Descr}}</td>
{{end}}
...

Runnable example.

相关问题