我正在尝试定义将在基本模板中注入的代码块(如果它们已定义)。我不想将一个页面上需要的所有脚本都包含到另一个不需要它的页面上。
我正在使用:
"github.com/go-martini/martini"
"github.com/martini-contrib/binding"
"github.com/martini-contrib/render"基本上,我想要做的是:
在布局上:admin.tmpl
<script src="jquery.min.js"></script>
<script src="scripts.min.js"></script>
{{ footer_extra }}在new.tmpl上
{{define "footer_extra"}}
<!-- scripts just for this page -->
<script src="script-1.js"></script>
<script src="script-2.js"></script>
<script src="script-3.js"></script>
{{end}}当我使用模板时,它似乎起作用了。
但是我注意到我不能定义多个模板,这有点破坏了我想要实现的目标。
index.tmpl
{{define "footer_extra"}}
<!-- scripts just for this page -->
<script src="script-1.js"></script>
<script src="script-2.js"></script>
{{end}}new.tmpl
{{define "footer_extra"}}
<!-- scripts just for this page -->
<script src="script-3.js"></script>
<script src="script-4.js"></script>
{{end}}layout.tmpl
<script src="main.js"></script>
{{template "footer_extra"}}将抛出一个PANIC template: redefinition of template "footer_extra"
发布于 2015-05-07 08:23:12
我知道这是违反直觉的,但出于性能原因,最好将所有javascript捆绑到几个文件中,并将它们包含在每个页面中。
但是如果你仍然想这样做,有两种方法可以解决这个问题:
footer_extra指定一个不同的名称,然后在模板中显式引用它:var buf bytes.Buffer //或ParseFiles如果您是这样阅读这些tpl := template.Must(template.New("").Parse(tpls)) //呈现页脚tpl.ExecuteTemplate(&buf,"footer_extra",nil)页脚:= buf.String() buf.Reset() //将页脚发送到主模板tpl.ExecuteTemplate(&buf,“索引”,mapstringinterface{}{ " footer ":template.HTML(页脚),// ^这使得go不会转义<&> })
那么你的模板将只有:
{{定义"page1"}} {{.Footer}} {{end}}
https://stackoverflow.com/questions/30033170
复制相似问题