2016-09-23 7 views
0

私はレンダリングするとき、私は、コントローラ上でレンダリングするための他のファイル・リターンの構造体をレンダリングする方法がわからない、データとHTMLをレンダリングしようと、structをhtmlテンプレートにレンダリングする方法は?

コード:

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) 

パッケージをレンダリングマイ:

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コード:

<!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> 

かpまで

type Sample struct { 
    Temppath string 
    Data  interface{} 
} 

その後、タイプSampleも渡されようとしているすべてのデータのプレースホルダとして他のコントローラで使用することができますにはinterface{}として構造体Sampleで使用するためにindexTemplate.Execute(w, obj.Data)

+1

'データ構造{}'を 'データインターフェース{}'に変更する – putu

+0

ありがとう、固定、ありがとう、 –

+0

'データ構造体{}'(または 'データインタフェース{}')ではなく、 'Data controller.Index'で作成したインデックスタイプ) – Dolanor

答えて

2

宣言フィールドDataをパッケージをレンダリングtype Index structお尻テンプレートに。

関連する問題