Кодовый блок Голанг и Мартини
Я пытаюсь определить блоки кода, которые будут вставлены в базовый шаблон, если они определены. Я не хочу включать все сценарии, которые требуются на одной странице, на другую, которая этого не требует.
Я использую:
"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"
1 ответ
Я знаю, что это нелогично, но по соображениям производительности лучше объединить весь ваш javascript в несколько файлов и включить их на каждой странице.
Но если вы все еще хотите это сделать, есть два способа решения проблемы:
Дайте другой
footer_extra
другое имя, а затем явно указывайте его в своем шаблоне:<script src="jquery.min.js"></script> <script src="scripts.min.js"></script> {{ admin_footer_extra }}
Сделайте нижнюю часть данных, которые вы отправляете в шаблон:
var buf bytes.Buffer // or ParseFiles if that's how you're reading these tpl := template.Must(template.New("").Parse(tpls)) // render the footer tpl.ExecuteTemplate(&buf, "footer_extra", nil) footer := buf.String() buf.Reset() // send the footer to the main template tpl.ExecuteTemplate(&buf, "index", map[string]interface{}{ "Footer": template.HTML(footer), // ^ this makes it so go won't escape < & > })
Тогда ваш шаблон будет просто иметь:
{{define "page1"}} {{.Footer}} {{end}}