перейти к таблице шаблонов html

Я хочу сделать таблицу в HTML в пакете go "template", и я хочу добавить строки в цикле, но я не нашел, как это сделать

мой код:

package main
import (
     "net/http"
     "html/template"
)
type Devicevalue_view struct {
    Devicetype string
    Iddevice   string
    Devicename string
    Oidname    string
    Value      string
  }
func page_1(w http.ResponseWriter, r *http.Request){
    for i:=1; i<10; i++{    
        data := Devicevalue_view{
            Devicetype: "devicetype",
            Iddevice: "iddevice",
            Devicename: "devicename",
            Oidname: "oidname",
            Value: "value",
        }   
        tmpl, _ := template.ParseFiles("./index.html")
        tmpl.Execute(w, data)
    }   
}
func main() {
    http.HandleFunc("/table", page_1) 
    http.ListenAndServe(":3000", nil)
}

я получаю это:


Devices
Type    Name    Param   Time    Value
devicetype  iddevice    devicename  oidname value
Devices
Type    Name    Param   Time    Value
devicetype  iddevice    devicename  oidname value
...

но я хочу что-то вроде этого

Devices
Type    Name    Param   Time    Value
devicetype  iddevice    devicename  oidname value
devicetype  iddevice    devicename  oidname value
...

Я не понимаю, как соединить все ячейки в одной таблице

index.html: https://drive.google.com/file/d/1HzEL0i3VhiafPzlV8iC0kU8WaSQwoYZY/view?usp=sharing


person Сергей Власов    schedule 07.07.2019    source источник
comment
Сначала вы должны агрегировать свои данные в срез, а затем в шаблоне вы можете использовать действие range, чтобы зациклиться на этом срезе и отобразить отдельные строки. В настоящее время вы визуализируете каждую строку отдельно в отдельном файле index.html, это просто неправильно. Также вы должны включить код шаблона в вопрос и не ссылаться на него вне SO.   -  person mkopriva    schedule 07.07.2019


Ответы (1)


Поскольку вы выполняете шаблон внутри for loop. Также вы можете пройти один struct. Чтобы передать массив, вы должны передать его как член структуры.

package main

import (
    "html/template"
    "net/http"
)

type Data struct {
    Items []Devicevalue_view
}

type Devicevalue_view struct {
    Devicetype string
    Iddevice   string
    Devicename string
    Oidname    string
    Value      string
}

func page_1(w http.ResponseWriter, r *http.Request) {
    data := Data{}
    for i := 1; i < 10; i++ {
        view := Devicevalue_view{
            Devicetype: "devicetype",
            Iddevice:   "iddevice",
            Devicename: "devicename",
            Oidname:    "oidname",
            Value:      "value",
        }

        data.Items = append(data.Items, view)
    }

    tmpl, _ := template.ParseFiles("./index.html")
    tmpl.Execute(w, data)
}
func main() {
    http.HandleFunc("/table", page_1)
    http.ListenAndServe(":3000", nil)
}

Также вам нужно перебирать данные и динамически генерировать строку.

<!DOCTYPE html>
<html lang="en">
<body>
<table>
    <tr>
        <th>Type</th>
        <th>Name</th>
        <th>Param</th>
        <th>Time</th>
        <th>Value</th>
    </tr>
    {{ range .Items}}
        <tr>
            <td>{{ .Devicetype }}</td>
            <td>{{ .Iddevice }}</td>
            <td>{{ .Devicename }}</td>
            <td>{{ .Oidname }}</td>
            <td>{{ .Value }}</td>
        </tr>
    {{ end}}
</table>
</body>
</html>
person Shalauddin Ahamad Shuza    schedule 07.07.2019
comment
@СергейВласов также проверьте html-файл. - person Shalauddin Ahamad Shuza; 08.07.2019
comment
Примите ответ, это поможет другим. - person Shalauddin Ahamad Shuza; 09.07.2019