【发布时间】:2018-02-20 19:14:37
【问题描述】:
使用text/html 我在我的基本模板中定义了一个block,包含默认内容。在某些情况下,我希望这个块是空的,所以我想我可以重新定义它的名字,让它不包含类似的东西:
{{ block "something" . }}
<h1>Default content</h1>
{{ end }}
// later in a place that does not want "something" ...
{{ define "something" }}{{ end }}
不知何故,Go 似乎认为这个定义是“零”并且仍然会呈现默认内容,除非我将任何非空白内容放入定义中。
我发现this issue on the Golang repo 在a Playground example 中很好地描述了同样的事情:
package main
import (
"fmt"
"os"
"runtime"
"text/template"
)
func main() {
fmt.Printf("Version: %q\n", runtime.Version())
t, err := template.New("master").Parse(`{{block "area51" .}}Original Content{{end}}`)
if err != nil {
panic(err)
}
t, err = t.New("other_template").Parse(`{{define "area51"}}{{end}}`)
if err != nil {
panic(err)
}
fmt.Printf("Output:\n")
if err := t.ExecuteTemplate(os.Stdout, "master", nil); err != nil {
panic(err)
}
fmt.Printf("\n")
}
奇怪的是,问题提到它已修复(如果我理解正确,它会出现在 1.8.1 中),但它对我不起作用,无论是 1.8.1+ 还是 1.9。
这是 Golang 中的错误还是方法有缺陷?我是否需要做一些不同的事情来重新定义块以使其呈现为空?
【问题讨论】:
标签: go go-templates