一尘不染

模板包含的模板中的变量

go

我试图将值放入“标题”模板中,例如标题和导航链接,但无法访问我从包含的模板发送到主模板的变量。

渲染模板:

    ...
    templateName := "index"
    args := map[string]string{
            "Title":       "Main Page",
            "Body":        "This is the content",
    }
    PageTemplates.ExecuteTemplate(w, templateName+".html", args)
    ...

index.html模板:

   {{template "header"}} <-- Including the "header.html" template
   {{.Body}}             <-- Variable that works
   {{template "footer"}} <-- Does not matter!

header.html模板:

   {{define "header"}}
   <!DOCTYPE html>
   <html lang="en">
   <head>
            <title>{{.Title}}</title> <-- Variable empty :(
   </head>
   <body>
   {{end}}

显然,它不会那样工作。

也许有一种方法可以解析/获取模板并将变量放入其中,而无需将整个头文件放入代码中?然后,我可以将该模板作为变量发送到我的主模板。但这似乎并不是最好的方法。


阅读 244

收藏
2020-07-02

共1个答案

一尘不染

您可以在调用模板时将上下文传递给模板。在您的示例中,更改{{template "header"}}{{template "header" .}}应该足够。

官方文档的相关部分:

{{template“ name”}}
使用零数据执行具有指定名称的模板。

{{模板“名称”管道”}}
执行指定名称的模板,将点设置为管道的值。

PS:这是不相关的问题,但你也应该删除换行符之间{{define "header"}}<!DOCTYPE html>,使DOCTYPE是真的在你的模板中的第一件事情。

2020-07-02