Renderização de Modelo

O Iris tem suporte integrado para oito mecanismos de modelo e os desenvolvedores ainda podem usar qualquer mecanismo de modelo externo da linguagem Go porque Context.ResponseWriter() é um io.Writer.

Todos os mecanismos de modelo compartilham uma API comum, incluindo análise usando recursos integrados, layout e layout específico de Party, funções de modelo e renderização parcial.

# Nome Analisador
1 HTML html/template
2 Blocos 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

Você pode registrar um mecanismo de visualização para cada Party. Use o método Application/Party.RegisterView(ViewEngine) para registrar, como mostrado abaixo:

Carregue todos os modelos com a extensão ".html" da pasta "./views" e analise usando o pacote padrão html/template.

// [app := iris.New...]
tmpl := iris.HTML("./views", ".html")
app.RegisterView(tmpl)

No manipulador da rota principal, use o método Context.View para renderizar ou executar uma visualização.

if err := ctx.View("hi.html"); err != nil {
    ctx.HTML("%s", err.Error())
    return
}

Use o método Context.ViewData no middleware ou manipulador principal para vincular valores Go com padrões de chave-valor na visualização.

Vincule {{.mensagem}} com "Olá mundo!".

ctx.ViewData("mensagem", "Olá mundo!")

Vinculação raiz:

if err := ctx.View("user-page.html", User{}); err != nil {
    ctx.HTML("%s", err.Error())
    return
}

// vinculação raíz como {{.Nome}}

Use o método AddFunc do mecanismo de visualização preferido para adicionar funções de modelo.

//       nome da função, parâmetros de entrada, valor de retorno
tmpl.AddFunc("saudacao", func(s string) string {
    return "Saudações " + s + "!"
})

Se desejar recarregar a cada solicitação, chame o método Reload do mecanismo de visualização.

tmpl.Reload(true)

Se desejar usar modelos embutidos sem depender do sistema de arquivos local, use a ferramenta externa go-bindata e passe a função AssetFile() que ele gera como o primeiro parâmetro de entrada para o mecanismo de visualização preferido.

tmpl := iris.HTML(AssetFile(), ".html")

Código de exemplo:

// Arquivo: main.go
pacote principal

import "github.com/kataras/iris/v12"

func principal() {
    app := iris.New()

    // Analisar todos os modelos com o sufixo ".html" da pasta "./views"
    // Use o pacote padrão `html/template` para análise
    tmpl := iris.HTML("./views", ".html")
    // Definir delimitadores personalizados
    tmpl.Delims("{{", "}}")
    // Ativar recompilação para alterações locais nos arquivos de modelo
    tmpl.Reload(true)
    
    // As funções de modelo padrão incluem:
    //
    // - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
    // - {{ render "header.html" . }}
    // E o caminho relativo para a página atual:
    // - {{ render_r "header.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // Registrar uma função de modelo personalizada:
    tmpl.AddFunc("saudar", func(s string) string {
        return "Saudações " + s + "!"
    })
    
    // Registrar o mecanismo de visualização para a aplicação,
    // isso carregará os modelos.
    app.RegisterView(tmpl)
    
    // Método: GET
    // Recurso: http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // Vincular {{.message}} a "Olá, mundo!"
        ctx.ViewData("message", "Olá, mundo!")
        // Renderizar o arquivo de modelo: ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })
    
    app.Listen(":8080")
}
Página de saudação


{{.message}}
{{saudar "para você"}}

Abra uma nova guia no seu navegador e visite http://localhost:8080.

O resultado renderizado deve ser o seguinte:

    Página de saudação


    Olá, mundo!
    Saudações para você!