Golang html/templates:使用自定义分隔符解析文件

huangapple go评论83阅读模式
英文:

Golang html/templates : ParseFiles with custom Delims

问题

使用带有分隔符的模板在使用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) }

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

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) }

这导致相同的结果。

如果这相关的话,我需要在我的网站的特定页面中嵌入一个小的Angular应用程序。

另外,我有一个基本模板,其中包含一个通用的HTML结构,我使用ParseFiles()与特定页面的模板组合,导致以下布局:

/templates/base.tmpl
/templates/homepage/inner.tmpl
/templates/otherpage/inner.tmpl

这是否可能?如果是,我做错了什么?

英文:

Using templates with delimiters works fine when using template.New("...").Delims("[[", "]]").Parse()
However, I cannot figure out how to get to the same result with 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) }

I have no errors, but the Delimiters are not changed.

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) }

This leads to the same result.

In case this is relevant, my need is to embed a small angular app in a particular page of my site.

Also, I have a base template with a common HTML structure that I combine with a page-specific template with ParseFiles(), leading to this layout :

/templates/base.tmpl
/templates/homepage/inner.tmpl
/templates/otherpage/inner.tmpl

Is this possible at all ? If so, what am I doing wrong ?

答案1

得分: 7

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

tmpl, err := template.New("").Delims("[[", "]]").ParseFiles("base.tmpl", "homepage/inner.tmpl")

这个API的一部分很奇怪,不太明显。在模板包还有额外的Set类型的早期,这个API更有意义。

英文:

Create a dummy template, set the delimiters and then parse the files:

 tmpl, err := template.New("").Delims("[[", "]]").ParseFiles("base.tmpl", "homepage/inner.tmpl")

This aspect of the API is quirky and not very obvious. The API made more sense in the early days when the template package had the additional Set type

huangapple
  • 本文由 发表于 2014年11月25日 06:07:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/27115076.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定