2013-07-06 8 views
5

Mam problem z kontrolowaniem białych znaków i formatowaniem szablonów html/template w czytelny sposób. Moje szablony wyglądać somthing tak:Jak mogę kontrolować białe znaki po akcji w html/template?

layout.tmpl

{{define "layout"}} 
<!DOCTYPE html> 
<html> 
     <head> 
       <title>{{.title}}</title> 
     </head> 
     <body> 
       {{ template "body" . }} 
     </body> 
</html> 
{{end}} 

body.tmpl

{{define "body"}} 
{{ range .items }} 
{{.count}} items are made of {{.material}} 
{{end}} 
{{end}} 

kod

package main 

import (
    "os" 
    "text/template" 
) 

type View struct { 
    layout string 
    body string 
} 

type Smap map[string]string 

func (self View) Render(data map[string]interface{}) { 
    layout := self.layout + ".tmpl" 
    body := self.body + ".tmpl" 
    tmpl := template.Must(template.New("layout").ParseFiles(layout, body)) 
    tmpl.ExecuteTemplate(os.Stdout, "layout", data) 
} 

func main() { 
    view := View{ "layout", "body" } 
    view.Render(map[string]interface{}{ 
     "title": "stock", 
     "items": []Smap{ 
      Smap{ 
       "count": "2", 
       "material": "angora", 
      }, 
      Smap{ 
       "count": "3", 
       "material": "wool", 
      }, 
     }, 
    }) 
} 

Ale to produkuje (uwaga: nie jest to linia powyżej the doctype):

<!DOCTYPE html> 
<html> 
    <head> 
     <title>stock</title> 
    </head> 
    <body> 


2 items are made of angora 

3 items are made of wool 


    </body> 
</html> 

Co chcę jest:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>stock</title> 
    </head> 
    <body> 
2 items are made of angora 
3 items are made of wool 
    </body> 
</html> 

W innych językach szablonów mogę powiedzieć rzeczy, jak

[[- value -]] 

i spacji przed i po działaniu są usuwane, ale nie widzę niczego tak jak w html/template. Czy to naprawdę oznacza, że ​​muszę uczynić moje szablony nieczytelnymi, tak jak poniższe?

layout.tmpl

{{define "layout"}}<!DOCTYPE html> 
<html> 
    <head> 
     <title>.title</title> 
    </head> 
    <body> 
{{ template "body" . }} </body> 
</html> 
{{end}} 

body.tmpl

{{define "body"}}{{ range .items }}{{.count}} items are made of {{.material}} 
{{end}}{{end}} 

Odpowiedz

1

Tak, białe znaki i linie są tłumaczone dosłownie. Jeśli masz linię z {{define}} lub cokolwiek innego, co nie daje wyjścia, będziesz miał pustą linię w sparsowanym pliku.

Idealnie, ponieważ używasz szablonu, nie powinieneś przeglądać ani analizować danych wyjściowych. Dla odniesienia użyj JSP/JSF i zobacz brzydkie wyniki, które ci daje. Zobacz źródło większości stron w Internecie, są również brzydkie.

Powodzenia!

2

Whitespace w tym przypadku nie ma różnicy w renderowanym obrazie w przeglądarce użytkownika, więc sterowanie nim ma niewiele sensu ponad być może estetyką.

Mówiąc inaczej, można mieć ładnie sformatowane szablony (które wolałbym) lub częściowo dobrze sformatowany HTML (bez zagnieżdżonych wcięć). Wybierz jeden lub dodaj kod HTML za pomocą dowolnego z istniejących formaterów.

5

Można używać białą przestrzeń kontroler

{{range .foos -}} // eats trailing whitespace 
    <tr><td>do something</td></tr> 
{{- end}} // eats leading whitespace (\n from previous line) 
+0

Od idź '1.6' https://golang.org/doc/go1.6#template – webwurst

+0

tak, dziękuję @webwurst przed 1.6, można sprawdzić https : //golang.org/pkg/text/template/#hdr-Text_and_spaces – hkulekci

+0

Działa to tylko dla 'text/template', a nie' html/template'. –

Powiązane problemy