2015-03-07 4 views
5

Ich versuche, Schleife als benutzerdefinierte Funktion zu implementieren. Es dauert eine Anzahl von Iterationen und Inhalt zwischen geschweiften Klammern, dann sollte es den Inhalt n-mal in Klammern durchlaufen. Bitte, siehe Beispiel:Golang. Wie man Schleifenfunktion mit html/template-Paket erstellen

main.go

template.Must(template.ParseFiles("palette.html")).Funcs(template.FuncMap{ 
     "loop": func(n int, content string) string { 
      var r string 
      for i := 0; i <= n; i++ { 
       r += content 
      } 
      return r 
     }, 
    }).ExecuteTemplate(rw, index, nil) 

index.html

{{define "index"}} 
<div class="row -flex palette"> 
    {{loop 16}} 
    <div class="col-2"></div> 
    {{end}} 
</div> 
{{end}} 

Ausgabe

<div class="row -flex palette"> 
    <div class="col-2"></div> 
    <div class="col-2"></div> 
    <div class="col-2"></div> 
    <div class="col-2"></div> 
    ... 16 times 
</div> 

Ist es möglich, es zu implementieren? Die Motivation ist, dass die Standardfunktionalität des text/template es nicht erlaubt, nur Inhalte zwischen geschweiften Klammern zu iterieren. Ja, wir können es durch range Aktion durch "außerhalb" Daten gehen.

Antwort

9

Sie können range für eine Funktion verwenden, die eine Scheibe zurückgibt. http://play.golang.org/p/FCuLkEHaZn

package main 

import (
    "html/template" 
    "os" 
) 

func main() { 
    html := ` 
<div class="row -flex palette"> 
    {{range loop 16}} 
    <div class="col-2"></div> 
    {{end}} 
</div>` 
    tmpl := template.Must(template.New("test").Funcs(template.FuncMap{ 
     "loop": func(n int) []struct{} { 
      return make([]struct{}, n) 
     }, 
    }).Parse(html)) 
    tmpl.Execute(os.Stdout, nil) 
} 
+0

Gute Idee! Also gibt es keine Möglichkeit, Inhalte aus geschweiften Klammern zu bekommen?) –

+0

Nicht, dass ich mir dessen bewusst bin. – Innominate

+2

Wenn Sie die Slice-Elemente nicht verwenden, ist es effizienter, eine leere Struktur zu verwenden. http://play.golang.org/p/_jRV62bOB3 Auf diese Weise ordnen Sie nur einen Schichtkopf (konstante Größe) anstelle von n Elementen zu. – Logiraptor

Verwandte Themen