Golang html/templates:使用自定义Delims的ParseFiles

Jér*_*émy 4 templates go angularjs

使用带分隔符的模板在使用时工作正常template.New("...").Delims("[[", "]]").Parse() 但是,我无法弄清楚如何获得相同的结果template.ParseFiles()

tmpl, err := template.ParseFiles("base.tmpl", "homepage/inner.tmpl")
if err != nil { panic(err) }
tmpl.Delims("[[", "]]")
p := new(Page) 
err = tmpl.Execute(os.Stdout, p)
if err != nil { panic(err) }
Run Code Online (Sandbox Code Playgroud)

我没有错误,但分隔符没有改变.

tmpl, err := template.ParseFiles("base.tmpl", "homepage/inner.tmpl")
t := tmpl.Lookup("base.tmpl").Delims("[[", "]]")
p := new(Page) 
err = t.Execute(os.Stdout, p)
if err != nil { panic(err) }
Run Code Online (Sandbox Code Playgroud)

这导致相同的结果.

如果这是相关的,我需要在我的网站的特定页面中嵌入一个小的角度应用程序.

此外,我有一个基本模板,其中包含一个常见的HTML结构,我将其与一个特定于页面的模板与ParseFiles()结合使用,从而实现了这种布局:

/templates/base.tmpl
/templates/homepage/inner.tmpl
/templates/otherpage/inner.tmpl
Run Code Online (Sandbox Code Playgroud)

这有可能吗?如果是这样,我做错了什么?

Mix*_*els 6

创建一个虚拟模板,设置分隔符,然后解析文件:

 tmpl, err := template.New("").Delims("[[", "]]").ParseFiles("base.tmpl", "homepage/inner.tmpl")
Run Code Online (Sandbox Code Playgroud)

API的这个方面很古怪而且不是很明显.在模板包具有额外的Set类型的早期,API更有意义

  • 其他人的注意事项:template.New()的空白""参数导致我的运行时恐慌.用template.New("some_template_name")替换template.New("") (2认同)
  • 不仅@codefreak说了什么,而且还必须使用给定的名称调用ExecuteTemplate.只调用Execute会给你一个零指针解除引用恐慌. (2认同)