Golang:使用{{ template “partial.html” . }}的先决条件是什么?

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

Golang: What's the pre-requisite to use {{ template "partial.html" . }}

问题

import "os"
import "html/template"
...
t, _ := template.ParseFiles("login.html")
t.Execute(os.Stdout, data)
...
login.html:

{{ template "header.html" . }}
<form ....>...</form>
{{ template "footer.html" . }}

没有输出,也没有错误。

如果我删除那两行 {{ template "..." . }},我可以看到 <form ...> 部分被输出。

要使 {{ template "..." . }} 正常工作,需要什么条件?或者我完全误解了 html/template 的使用方式?

英文:
import &quot;os&quot;    
import &quot;html/template&quot;
...    
t, _ := template.ParseFiles(&quot;login.html&quot;)
t.Execute(os.Stdout, data)
...
login.html:

{{ template &quot;header.html&quot; . }}
&lt;form ....&gt;...&lt;/form&gt;
{{ template &quot;footer.html&quot; . }}

no output, no error.

If I remove those two lines of {{ template "..." . }}, I could see the <form ...> part being outputed.

What's required to make {{ template "..." . }} work or am I misunderstanding html/template completely?

答案1

得分: 17

你需要为包含其他模板的文件定义一个名称,然后执行它。

login.tmpl

{{define "login"}}
<!doctype html>
<html lang="en">
..
{{template "header" .}}
</body>
</html>
{{end}}

header.tmpl

{{define "header"}}
无论什么内容
{{end}}

然后解析这两个文件

t := template.Must(template.ParseFiles("login.tmpl", "header.tmpl"))
// 然后使用定义的名称执行模板
t.ExecuteTemplate(os.Stdout, "login", data)
英文:

You need to define a name for the file that will contain the other templates and then execute that.

login.tmpl

{{define &quot;login&quot;}}
&lt;!doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;
..
{{template &quot;header&quot; .}}
&lt;/body&gt;
&lt;/html&gt;
{{end}}

header.tmpl

{{define &quot;header&quot;}}
whatever
{{end}}

Then you parse both those files

t := template.Must(template.ParseFiles(&quot;login.tmpl&quot;, &quot;header.tmpl&quot;))
// and then execute the template with the defined name
t.ExecuteTemplate(os.Stdout, &quot;login&quot;, data)

huangapple
  • 本文由 发表于 2015年5月17日 07:25:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/30281747.html
匿名

发表评论

匿名网友

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

确定