猿问

如何将嵌套结构传递给 gohtml 模板文件并将其显示在表格中?

我无法弄清楚如何将从 MySQL 数据库获取的数据传递到我的 HTML 模板并显示表格中的每一列。


我发现的说明工作正常,但是当我尝试将它实现到我自己的代码中时,它不会将数据传递到我的 HTML,并且表格仍然是空的。


去代码:



var table = NewView("bootstrap", "views/pages/table.gohtml")


func main() {

    http.Handle("/views/", http.StripPrefix("/views/", http.FileServer(http.Dir("./views"))))

    http.HandleFunc("/table", tableHandler)

    fmt.Println("server running on port :8080")

    http.ListenAndServe(":8080", nil)

}

func tableHandler(w http.ResponseWriter, r *http.Request) {

    db := ipSQL.SqlConnect()


    data := ipSQL.SqlSelect(db)

    // This returns a nested struct and stores it in the 'data' variable.

    /*

        type Data struct {

        Items []Devicevalue_view

        }


        type Devicevalue_view struct {

            Name        string

            Ip          string

            Pcn         string

            Description string

        }

    */


    fmt.Println(data)

    //The println prints the following: 'test1: {[{Name1 192.168.166.13 123456 webserver} {Name2 192.168.166.14 123456 webserver2}]}'


    err := table.Render(w, data)

    //This renders the page together with a default layout. table is initialized somewhere else in this way:

    // var table = NewView("bootstrap", "views/pages/table.gohtml") --> This is a function I found and confirmed to be working.

    if err != nil {

        panic(err)

    }

}

我一直在使用以下代码从名为 bootstrap.gohtml 的不同文件呈现我的网页的标准布局,并从我指定的文件中获取 HTML 的主体。(在 ---UPDATE 2 中添加了这个)




func NewView(layout string, files ...string) *View {

    files = append(layoutFiles(), files...)

    t, err := template.ParseFiles(files...)

    if err != nil {

        panic(err)

    }


    return &View{

        Template: t,

        Layout:   layout,

    }

}


type View struct {

    Template *template.Template

    Layout   string

}


func (v *View) Render(w http.ResponseWriter, data interface{}) error {

    spew.Dump(data)

    return v.Template.ExecuteTemplate(w, v.Layout, data)

}


眼眸繁星
浏览 92回答 1
1回答

茅侃侃

我通过将 {{template "yield"}} 更改为 {{template "yield" .}} 使其工作。据我了解,这将使用管道将变量解析到下一个模板文件。{{define "bootstrap"&nbsp; &nbsp;<head>some links to css among other things</head>&nbsp; &nbsp;<nav>a navigation bar</nav>&nbsp; &nbsp;{{template "yield" .}}&nbsp; &nbsp;<foot>footer</foot>{{end}}yield 模板现在可以访问我解析到 bootstrap 模板的变量。
随时随地看视频慕课网APP

相关分类

Go
我要回答