2015-05-16 2 views
4
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" . }} 

нет выход, без ошибок.Golang: В чем заключается предпосылка использования {{template "partial.html". }}

Если я удалю эти две строки {{template "...". }}, Я мог видеть, как часть выводится.

Что необходимо сделать {{template "...". }} работать, или я полностью недопонимаю html/template?

+1

Это выглядит так, как будто вы можете предположить, что действие 'template' может принимать имя файла; он не может. Он ссылается на уже обработанный именованный шаблон (через 'template.Parse ...', 'someOtherTemplate.Parse ...' или посредством действия 'define' анализируемого шаблона). См. Раздел «Связанные шаблоны»] (https://golang.org/pkg/text/template/#hdr-Associated_templates) документации пакета «текст/шаблон». –

+0

@DaveC Эта ссылка http://gohugo.io/templates/go-templates/, кажется, предлагает это; однако это было из поиска google, интересно, был ли это какой-то синтаксический suger, добавленный hugo. – Shawn

+1

Возможный дубликат [golang template - как визуализировать шаблоны?] (Http://stackoverflow.com/questions/19546896/golang-template-how-to-render-templates) – Shawn

ответ

9

Вам необходимо определить имя файла, который будет содержать другие шаблоны, а затем выполнить это.

login.tmpl

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

header.tmpl

{{define "header"}} 
whatever 
{{end}} 

Затем разобрать оба эти файлы

template.Must(template.ParseFiles("login.tmpl", "header.tmpl")) 

, а затем выполнить шаблон с определенным именем:

template.ExecuteTemplate(os.Stdout, "login", data) 
+0

t: = template.Must (template.ParseFiles («login.tmpl», «header.tmpl»)); t.ExecuteTemplate (os.Stdout, «login», data) – Sairam

Смежные вопросы