模板不呈现任何内容,也没有错误,但状态为 200

我在一个简单的 HTTP 服务器上玩 Go:


// var tpl = template.Must(template.New("").Funcs(template.FuncMap{"isRegistered": isRegistered}).ParseGlob("templates/*")) // functions will be added later

var tpl = template.Must(template.ParseGlob("templates/*"))


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

    //// defined templates are: "home.html", "layout", "layout.html", "contact.html", "body"

    log.Println("in handler: ", tpl.DefinedTemplates())


    err := tpl.ExecuteTemplate(w, "contact.html", nil)

    if err != nil {

        fmt.Println(err) // no error displayed

    }

    // fmt.Fprintf((w), "write") - This works fine

}


func main() {


    log.Println("Serving on 8888 port")

    http.HandleFunc("/contact", contact)


    http.ListenAndServe(":8888", nil)

}



{{define "layout"}}

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>{{.Title}}</title>

    <meta name="description" content="{{.Description}}">

    <link rel="canonical" href="{{.Canonical}}" />

</head>

<body>


{{template "body" .}}


</body>

</html>

{{end}}

{{define "body"}}

<h1>Contact us page</h1>


<p>

    Your name is...

</p>


{{end}}


localhost:8888/contact返回OK 200 和空正文。我用了这个例子:https ://stackoverflow.com/a/36643663/2110953


但是我将来还需要添加模板函数: var tpl = template.Must(template.New("").Funcs(template.FuncMap{"isRegistered": isRegistered}).ParseGlob("templates/*"))


手掌心
浏览 141回答 2
2回答

森栏

你contact.html不会“渲染”任何东西。它只是定义body模板,但不包括它(执行它)。要执行模板(在模板内),您可以使用{{template}}操作。要定义和执行模板,您可以使用{{block}}操作。模板操作:{{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.{{block "name" pipeline}} T1 {{end}}&nbsp; &nbsp; A block is shorthand for defining a template&nbsp; &nbsp; &nbsp; &nbsp; {{define "name"}} T1 {{end}}&nbsp; &nbsp; and then executing it in place&nbsp; &nbsp; &nbsp; &nbsp; {{template "name" pipeline}}&nbsp; &nbsp; The typical use is to define a set of root templates that are&nbsp; &nbsp; then customized by redefining the block templates within.如果您的目标是在所有页面中都有一个“固定”的页眉和页脚,那么您必须重新构建您的模板。在某处定义了一个header和模板,页面应该将它们作为第一个和最后一个元素包含在内。footer请参阅如何使用结构或变量值的字段作为模板名称?

尚方宝剑之说

更新:所以我只需要创建一个页眉和页脚模板:{{template "header" .}}<h1>Contact us page</h1><p>&nbsp; &nbsp; Your name is...</p>{{template "footer" .}}{{define "header"}}<!DOCTYPE html><html><head>&nbsp; &nbsp; <meta charset="UTF-8">&nbsp; &nbsp; <title>{{.Title}}</title>&nbsp; &nbsp; <meta name="description" content="{{.Description}}">&nbsp; &nbsp; <link rel="canonical" href="{{.Canonical}}" /></head><body>{{end}}{{define "footer"}}</body></html>{{end}}它工作得很好
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go