Ramin Farajpour Cami
Ramin Farajpour Cami

Reputation: 1685

How to render struct to html template?

i going to render html with data,when render,i don't know how to render struct of other file return for render on controller ,

code :

packages controller

type Index struct {
Title string
Body  string
}

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

if r.Method == "POST"{

    data := &Index{
        Title: "Hello",
        Body:  "Welcome to the WebGo.",
    }

    ff := renders.Sample{Temppath:"templates/index.tmpl",Data:data}
    ff.Render(w)

my render package:

package renders

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

type Sample struct {
  Temppath string
  Data struct{}   ## i don't know how to use pass value of package controller to renders package ?
}

func (obj Sample) Render(w http.ResponseWriter) error {

 var indexTemplate = template.Must(template.ParseFiles(obj.Temppath))
 if err := indexTemplate.Execute(w, obj.Data); err != nil {
    log.Println(err)
    return err
 }
 return nil
}

html code :

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script src="/static/js/sample.js"></script>
    <title>{{.Title}}</title>
    <style>
        body {
            font-family: sans-serif;
        }
        h1 {
            background: #ddd;
        }
        #sidebar {
            float: right;
        }
    </style>
</head>
<body>
    <h1>{{.Title}}</h1>
    <div id="sidebar">
        {{block "sidebar" .}}

        <ul>

        </ul>
        {{end}}
    </div>

    {{block "content" .}}
    <div id="content">
        {{.Body}}
    </div>
    {{end}}
</body>

</html>

how to pass type Index struct to renders package for use indexTemplate.Execute(w, obj.Data)

Upvotes: 1

Views: 2257

Answers (1)

putu
putu

Reputation: 6444

Declare field Data in struct Sample as interface{}:

type Sample struct {
    Temppath string
    Data     interface{}
}

The type Sample then can also be used in other controllers as placeholder of any data which is going to be passed to template.

Upvotes: 2

Related Questions