占位符不被替换

我正在试验这个包http/template。

我还已经管理了例如页眉、页脚、导航栏等包含在基本模板中:


{{ define "base" }}

    <!DOCTYPE html>

    <html>


    <!-- Start Head -->

    <head>

        {{ template "head" }}

    </head>

    <!-- End Head -->


    <!-- Start Body -->

    <body>

    {{ template "navbar" }}

    {{ template "content" }}

    {{ template "footer" }}

    </body>

    <!-- End Body -->

    </html>

{{ end }}

404页面:


{{ define "content" }}

    [...]

                    <h1 class="text-light text-right">404</h1>

                    <small>{{.CurrentURL}}</small>

    [...]

{{ end }}

所以这里的变量CurrentURL应该替换为当前的 URL。但是,这仅""在网站上显示为空 ( ):


<small></small>

但是现在我想替换一个变量,该变量在网页上仅显示为“”。


围棋代码:解析器:


func (parser *TemplateParser) ParseTemplate(name string) (tpl *template.Template, err error) {

  root, err := template.New("root").Parse(rootTmpl)

  // ...

  return root.ParseFiles(files...)

}

路线:


func (ws *WebServer) Exec(name string, r *http.Request, w http.ResponseWriter, data map[string]interface{}) (err error) {

    // ...

    // add default data

    data["CurrentURL"] = r.URL.RequestURI()


    // ...

    return tpl.Execute(w, data)

}

即使有一个数组,我也不能使用range等:


    type Test struct {

        CurrentURL string

        C []string

    }


    t := Test{

        CurrentURL: "Current URL",

        C: []string {"C1", "c2", "ccc4"},

    }


    tpl.Execute(w, t)

 <ul>

{{range .C}}

  <li>{{.}}</li>

{{end}}

</ul>

<!-- No <li></li> is created -->

我究竟做错了什么?


慕后森
浏览 114回答 2
2回答

慕婉清6462132

您必须将上下文传递给实例化的模板。利用{{&nbsp;template&nbsp;"content"&nbsp;.}}将数据传递.给content模板。

繁星点点滴滴

您没有将任何数据传递给子模板。根据文档:{{template "name"}}&nbsp; &nbsp; The template with the specified name is executed with nil data.{{template "name" pipeline}}&nbsp; &nbsp; The template with the specified name is executed with dot set&nbsp; &nbsp; to the value of the pipeline.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go