【问题标题】:How to render struct to html template?如何将结构呈现为 html 模板?
【发布时间】:2017-01-31 23:54:52
【问题描述】:

我要用数据渲染 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>

如何将type Index struct 传递给渲染包以供使用indexTemplate.Execute(w, obj.Data)

【问题讨论】:

  • Data struct{} 更改为Data interface{}
  • 谢谢,修复,再次感谢,
  • 或者您可以直接将您创建的索引类型指定为Data controller.Index,而不是Data struct{}(或Data interface{}
  • @IPutuSusila 添加为 asnwer
  • 我很高兴它有帮助。 @dmportella 完成,谢谢。

标签: go


【解决方案1】:

将结构Sample中的字段Data声明为interface{}

type Sample struct {
    Temppath string
    Data     interface{}
}

Sample 类型也可以在其他控制器中用作要传递给模板的任何数据的占位符。

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 2018-08-30
    • 2019-06-25
    • 2021-10-28
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多