恐慌:模板:模板的重新定义

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

panic: template: redefinition of template

问题

我得到了layout.tmpl文件:

<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>	
	<div id='left'>
		{{template "left" .}}
	</div>
	<div id='right'>
		{{template "right" .}}
	</div>
</body>
</html>

以及mainPage.tmpl文件:

{{define "left"}}
  左侧内容
{{end}}

{{define "right"}}
	右侧内容
{{end}}

以及someOtherPage.tmpl文件:

{{define "left"}}
  左侧内容2
{{end}}

{{define "right"}}
	右侧内容2
{{end}}

还有使用这些模板的martini go web应用martiniWebApp.go

package main
import (
	"github.com/go-martini/martini"
	"github.com/martini-contrib/render"
)

func main() {
	m := martini.Classic()
	m.Use(render.Renderer(render.Options{
		Layout: "layout",
	}))

	m.Get("/", func(r render.Render) {
		r.HTML(200, "mainPage", nil)
	})

	m.Get("/somePage", func(r render.Render) {
		r.HTML(200, "someOtherPage", nil)
	})
	m.Run()
}

当我运行我的应用程序go run martiniWebApp.go时,我得到了错误:

panic: template: 重新定义模板 "left"

如果我删除文件someOtherPage.tmpl并从web应用程序中删除路由/somePage,则错误消失。
但是如何组织布局块的构造以重用常见的布局HTML并在每个特定页面上仅定义少量块呢?

英文:

I got layout.tmpl:

&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;&lt;/head&gt;
&lt;body&gt;	
	&lt;div id=&#39;left&#39;&gt;
		{{template &quot;left&quot; .}}
	&lt;/div&gt;
	&lt;div id=&#39;right&#39;&gt;
		{{template &quot;right&quot; .}}
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

and mainPage.tmpl:

{{define &quot;left&quot;}}
  left content
{{end}}

{{define &quot;right&quot;}}
	right content
{{end}}

and someOtherPage.tmpl:

{{define &quot;left&quot;}}
  left content 2
{{end}}

{{define &quot;right&quot;}}
	right content 2
{{end}}

and martini go web app using that templates martiniWebApp.go:

package main
import (
	&quot;github.com/go-martini/martini&quot;
	&quot;github.com/martini-contrib/render&quot;
)

func main() {
	m := martini.Classic()
	m.Use(render.Renderer(render.Options{
		Layout: &quot;layout&quot;,
	}))

	m.Get(&quot;/&quot;, func(r render.Render) {
		r.HTML(200, &quot;mainPage&quot;, nil)
	})

	m.Get(&quot;/somePage&quot;, func(r render.Render) {
		r.HTML(200, &quot;someOtherPage&quot;, nil)
	})
	m.Run()
}

When I run my app go run martiniWebApp.go I got error:

panic: template: redefinition of template &quot;left&quot;

If I remove file someOtherPage.tmpl and route /somePage from web app then error disappear.
But how to organise layout-block construction to resuse common layout html and define only few blocks on every specific page?

答案1

得分: 1

你可以反过来进行操作,并在页面中包含你想要的部分。类似于:

{{template "header.html" .}}

内容

{{template "footer.html" .}}
英文:

You can go the other way around and and include the pieces you want in the page. Something like

{{template &quot;header.html&quot; .}}

 contents 

{{template &quot;footer.html&quot; .}}

huangapple
  • 本文由 发表于 2014年12月14日 21:46:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/27469955.html
匿名

发表评论

匿名网友

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

确定