2013-08-08 2 views
3

Я пытаюсь поместить значения в шаблон заголовка, например, заголовок и ссылки навигации, но не могу получить доступ к переменным, которые я отправил в основной шаблон из включенного.Переменная в шаблоне, включенном в шаблон

Рендеринг шаблона:

... 
    templateName := "index" 
    args := map[string]string{ 
      "Title":  "Main Page", 
      "Body":  "This is the content", 
    } 
    PageTemplates.ExecuteTemplate(w, templateName+".html", args) 
    ... 

шаблон index.html:

{{template "header"}} <-- Including the "header.html" template 
    {{.Body}}    <-- Variable that works 
    {{template "footer"}} <-- Does not matter! 

шаблон header.html:

{{define "header"}} 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
      <title>{{.Title}}</title> <-- Variable empty :(
    </head> 
    <body> 
    {{end}} 

По-видимому, он не будет работать таким образом.

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

ответ

3

Вы можете передать контекст шаблону, когда вы его вызываете. В вашем примере должно быть достаточно изменить {{template "header"}} на {{template "header" .}}.

Соответствующие части от official docs:

{{шаблон "имя"}}
шаблон с указанным именем выполняется с нулевыми данными.

{{template "name" конвейер}}
Шаблон с указанным именем выполнен с точечной установкой на значение конвейера.

PS: Это не имеет отношения к вопросу, но вы должны также удалить строку между {{define "header"}} и <!DOCTYPE html>, так что доктайп действительно первая вещь в вашем шаблоне.

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