猿问

go html/template 中的可选模板?

给定一组模板,例如:


布局.tpl

<html>

<head>

<title>Some title</title>

{{template extracss}}

</head>

<body>

<h1>Page title</h1>

{{template content .}}

</body>

</html>

主页.tpl

{{define "content"}}

<p>page content goes here</p>

{{end}}

编辑.tpl

{{define "content"}}

<form>form content goes here</form>

{{end}}


{{define "extracss"}}<style>body{background:pink}</style>{{end}}

使用它来呈现模板:


func Render(w http.ResponseWriter, tmpname string, data interface{}) {


    t, err := template.ParseFiles("views/layout.tpl", "views/"+tmpname+".tpl")

    // parse error

    if err != nil {

        http.Error(w, err.Error(), http.StatusInternalServerError)

    }


    if err := t.Execute(w, data); err != nil {

        http.Error(w, err.Error(), http.StatusInternalServerError)

    }

}

edit.tpl 将正确呈现,因为它定义了“extracss”,home.tpl 不会因为模板解析器正确地说“没有这样的模板“extracss””。


那么我将使用什么机制来允许使用“可选”模板?


有任何想法吗?


牧羊人nacy
浏览 223回答 2
2回答

紫衣仙女

一个空的定义作品:{{define "extracss"}}{{end}}。它可能不是超级优雅,但很容易理解。请注意,您不需要重复空定义。您可以将它们放入主模板中,并仅在需要时在包含的模板中重新定义它们。
随时随地看视频慕课网APP

相关分类

Go
我要回答