go 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
comment
Възможен дубликат на Go template/html итерация за генериране на таблица от struct   -  person Kate Orlova    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