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")
}