2016-11-21 7 views
2

Hier ist das Problem: Es gibt mehrere article s auf jeder Seite content Abschnitt, und ich möchte eine likebar Vorlage unter jedem Artikel einfügen.Wie man eine Vorlage in go erweitern?

So ist die base.tmpl ist wie:

<html> 
    <head>  
    {{template "head.tmpl" .}} 
    </head> 
    <body>  
    {{template "content.tmpl" .}} 
    </body> 
</html> 

und in article.tmpl Ich möchte haben:

{{define "content"}}  
      <div>article 1 
      {{template "likebar.tmpl" .}} 
      </div> 
      <div>article 2 
      {{template "likebar.tmpl" .}} 
     </div> 
     ... //these divs are generated dynamically 
    {{end}} 

Wie kann ich das erreichen mit html/template? Ich habe versucht, eine {{template "iconbar" .}} in base.tmpl einzusetzen und dann {{template "likebar.tmpl" .}} innerhalb {{define "content" verschachtelt, aber es scheiterte mit:

Template File Error: html/template:base.tmpl:122:12: no such template "likebar.tmpl"

Antwort

2

können Sie nur include/einfügen associated templates.

Wenn Sie mehrere Vorlagendateien haben, verwenden Sie template.ParseFiles() oder template.ParseGlob() sie alle und das Ergebnis Vorlage, die Vorlagen alle müssen zu analysieren, bereits verbunden sind, so können sie sich aufeinander beziehen.

Wenn Sie die obigen Funktionen zum Analysieren Ihrer Vorlagen verwenden, liegt der Grund dafür, dass likebar.tmpl nicht gefunden werden kann, darin, dass Sie auf einen ungültigen Namen (z. B. fehlender Ordnername) verweisen.

Bei der Analyse aus der Quelle string können Sie die Methode Template.Parse() verwenden, die auch verschachtelte Vorlagen der Vorlage der obersten Ebene zuordnet.

Sehen Sie diese 2 Arbeitsbeispiele:

func main() { 
    t := template.Must(template.New("").Parse(templ1)) 
    if err := t.Execute(os.Stdout, nil); err != nil { 
     panic(err) 
    } 

    t2 := template.Must(template.New("").Parse(templ2)) 
    template.Must(t2.Parse(templ2Like)) 
    if err := t2.Execute(os.Stdout, nil); err != nil { 
     panic(err) 
    } 
} 

const templ1 = `Base template #1 
And included one: {{template "likebar"}} 
{{define "likebar"}}I'm likebar #1.{{end}} 
` 

const templ2 = `Base template #2 
And included one: {{template "likebar"}} 
` 

const templ2Like = `{{define "likebar"}}I'm likebar #2.{{end}}` 

Output (versuchen Sie es auf dem Go Playground):

Base template #1 
And included one: I'm likebar #1. 

Base template #2 
And included one: I'm likebar #2. 
Verwandte Themen