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