Rendering del template
Iris ha un supporto integrato per otto motori di template, e i programmatori possono comunque utilizzare qualsiasi motore di template esterno del linguaggio Go perché Context.ResponseWriter() è un io.Writer.
Tutti i motori di template condividono un'API comune, inclusa l'analisi utilizzando risorse incorporare, layout e layout specifico del Party, funzioni del template e rendering parziale.
| # | Nome | Parser |
|---|---|---|
| 1 | HTML | html/template |
| 2 | Blocks | kataras/blocks |
| 3 | Django | flosch/pongo2 |
| 4 | Pug | Joker/jade |
| 5 | Handlebars | aymerick/raymond |
| 6 | Amber | eknkc/amber |
| 7 | Jet | CloudyKit/jet |
| 8 | Ace | yosssi/ace |
Puoi registrare un motore di visualizzazione per ogni Party. Utilizza il metodo Application/Party.RegisterView(ViewEngine) per registrare, come mostrato di seguito:
Carica tutti i template con l'estensione ".html" dalla cartella "./views" e analizza utilizzando il pacchetto standard html/template.
// [app := iris.New...]
tmpl := iris.HTML("./views", ".html")
app.RegisterView(tmpl)
Nell'handler del percorso principale, utilizza il metodo Context.View per rendere o eseguire una vista.
if err := ctx.View("hi.html"); err != nil {
ctx.HTML("%s", err.Error())
return
}
Utilizza il metodo Context.ViewData in un middleware o nell'handler principale per associare i valori Go con modelli chiave-valore nella vista.
Associa {{.message}} con "Ciao mondo!".
ctx.ViewData("message", "Ciao mondo!")
Associazione radice:
if err := ctx.View("user-page.html", User{}); err != nil {
ctx.HTML("%s", err.Error())
return
}
// associazione radice come {{.Name}}
Utilizza il metodo AddFunc del motore di visualizzazione preferito per aggiungere funzioni del template.
// nome della funzione, parametri di input, valore restituito
tmpl.AddFunc("saluta", func(s string) string {
return "Saluti " + s + "!"
})
Se si desidera ricaricare ad ogni richiesta, chiamare il metodo Reload del motore di visualizzazione.
tmpl.Reload(true)
Se si desidera utilizzare modelli embeddati senza affidarsi al filesystem locale, utilizzare lo strumento esterno go-bindata e passare la funzione AssetFile() che esso genera come primo parametro di input al motore di visualizzazione preferito.
tmpl := iris.HTML(AssetFile(), ".html")
Codice di esempio:
// File: main.go
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
// Analizza tutti i modelli con suffisso ".html" dalla cartella "./views"
// Usa il pacchetto standard `html/template` per l'analisi
tmpl := iris.HTML("./views", ".html")
// Imposta delimitatori personalizzati
tmpl.Delims("{{", "}}")
// Abilita la ricompilazione per modifiche locali ai file del modello
tmpl.Reload(true)
// Le funzioni predefinite del modello includono:
//
// - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
// - {{ render "header.html" . }}
// E il percorso relativo alla pagina corrente:
// - {{ render_r "header.html" . }}
// - {{ yield . }}
// - {{ current }}
// Registra una funzione del modello personalizzata:
tmpl.AddFunc("greet", func(s string) string {
return "Saluti " + s + "!"
})
// Registra il motore di visualizzazione nell'applicazione,
// questo caricherà i modelli.
app.RegisterView(tmpl)
// Metodo: GET
// Risorsa: http://localhost:8080
app.Get("/", func(ctx iris.Context) {
// Associa {{.message}} a "Ciao mondo!"
ctx.ViewData("message", "Ciao mondo!")
// Renderizza il file del modello: ./views/hi.html
if err := ctx.View("hi.html"); err != nil {
ctx.HTML("%s", err.Error())
return
}
})
app.Listen(":8080")
}