首页 > 解决方案 > 如何正确使用for循环获取数据库数据

问题描述

我陷入了模板的问题,因为我还没有真正了解它是如何工作的。

我的项目是一个支持票证系统,我正在尝试从 db 获取所有条目。在这种情况下,我使用的是 BoltDB。

问题是,当我创建一个 for 循环时,html 文件中的所有内容也将在这个循环的“内部”。

如何正确编码,以显示条目而不重复我的 html?

package main

import (
    "encoding/json"
    "html/template"
    "log"
    "net/http"
)

type ManageTicketsPage struct {
    Nome    string
    Chamado string
}

func ManageTicketsHandler(w http.ResponseWriter, r *http.Request) {
    //Pick all tickets from boltdb.
    entries := system_db_listTable(sysdb, "tickets")
    results := [][]string{[]string{
        "Chamado",
        "Nome do Operador",
        "Ativo Retorno",
        "Ativo Saida",
        "Status",
        "Data da Solicitação",
        "Atualizado em",
    }}
    for _, thisTicket := range entries {
        ticketObjectJson := thisTicket[1]
        thisTicketObject := new(ticket)
        err := json.Unmarshal(ticketObjectJson, &thisTicketObject)

        if err != nil {
            panic(err)
        }
        thisCSVLine := []string{
            thisTicketObject.Nome,
            thisTicketObject.AtivoCPU,
            thisTicketObject.AtivoSaida,
            thisTicketObject.Status,
            thisTicketObject.DataEntrada,
            thisTicketObject.SubmissionTime.Format("02/01/2006 15:04"),
        }

        Nome := thisTicketObject.Nome
        Chamado := thisTicketObject.AtivoCPU

        p := ManageTicketsPage{Nome: Nome, Chamado: Chamado}

        log.Println(Nome)
        results = append(results, thisCSVLine)
        t, _ := template.ParseFiles("web/admin/tickets.html")
        t.Execute(w, p)
        //log.Println(Nome)

    }

}

标签: gogo-templates

解决方案


最好创建一个 Ticket 结构,解组到 Ticket 的一个切片中,只在该切片中渲染一次并在模板中使用范围。


推荐阅读