2016-03-10 3 views
1

У меня есть два HTML шаблоны, с index.html расширения base.htmlидти - Рендер HTML/шаблон наследования

base.html как это:

{{ define "base" }} 
<html> 
<head> 
    <meta charget="utf-8"> 
    <title>{{ template "title" . }}</title> 
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.0.min.js"></script> 
    <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <script type="text/javascript" src="/js/isotope.pkgd.min.js"></script> 
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"> 
    <link rel="stylesheet" type="text/css" href="/css/style.css"> 
</head> 
<body> 
    {{ template "index" . }} 
</body> 
</html> 
{{ end }} 

И index.html:

{{ define "title" }}Homepage{{ end }} 
{{ define "index" }} 
<div class="wrapper"> 
    <div class="page-content"> 
     <div class="container"> 
      <div class="left"> 
       <img src="../public/images/img_landing_page_mac.png"> 
      </div> 
      <div class="right"> 
       <h2 style="font-size: 33px; letter-spacing: 5px">Organize <br>Modern Knowledge<br> for Mankind</h2> 
       <p style="font-size: 20px;margin-top: 35px;letter-spacing: 4px">Consume, Colect and Revisit <br>Knowledge at Your Fingertips</p> 
       <a href="#" style="margin-top: 80px;display: inline-block;margin-left: -17px"><img src="../public/images/btn_get_chrome.png"></a> 
      </div> 
     </div> 
    </div> 
</div> 
{{ end }} 

Он должен оказывать при запросе пути в браузере с обработчиком обратного вызова:

func IndexHandler(w http.ResponseWriter,r *http.Request){ 
    files:=[]string{"base","index"} 
    util.RenderTemplate(w,nil,files...) 
} 

RenderTemplate функция обертка для визуализации

func RenderTemplate(w http.ResponseWriter,data interface{},tmpl... string){ 
    cwd,_:=os.Getwd() 
    files:=make([]string, len(tmpl)) 
    for i,file:=range tmpl{ 
     files[i]=filepath.Join(cwd,"./view/"+file+".html") 
    } 
    t,err:=template.ParseFiles(files...) 
    if err!=nil{ 
     http.Error(w,err.Error(),http.StatusInternalServerError) 
     return 
    } 
    templates:=template.Must(t,err) 
    err=templates.Execute(w,data) 
    if err!=nil { 
     http.Error(w,err.Error(),http.StatusInternalServerError) 
    } 
} 

После того как я запустить сервер, я прошу, что путь в браузере, но ничего не визуализируется вообще. Что мне не хватает? Кажется, что ни наследственность не осмысливается здесь

Я следую за этим учебником пытаюсь сделать шаблоны с наследования/расширения:

https://elithrar.github.io/article/approximating-html-template-inheritance/

+0

Какой код состояния возвращается? 200? 500? – elithrar

ответ

2

define действие не выполняет шаблон, только template и block действия делают , Скорее всего, вы просто хотите удалить define из базового шаблона (первая и последняя строки), и он будет работать, как ожидалось.

Или вы можете использовать функцию Template.ExecuteTemplate вместо Template.Execute. Он принимает имя шаблона: ERR = templates.ExecuteTemplate (ш, «база», данные)

Или, если вы используете Go1.6 или более поздней версии, вы можете попробовать block действие вместо define.

На стороне заметьте, пожалуйста, подумайте об использовании gofmt.

+0

Большое спасибо! Он работал с 'block' – necroface