Renderizado de plantillas

Iris tiene soporte incorporado para ocho motores de plantillas, y los desarrolladores aún pueden usar cualquier motor de plantillas externo del lenguaje Go porque Context.ResponseWriter() es un io.Writer.

Todos los motores de plantillas comparten una API común, que incluye análisis utilizando recursos integrados, diseño y diseño específico de Party, funciones de plantilla y renderizado parcial.

# Nombre Analizador
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

Puede registrar un motor de vista para cada Party. Utilice el método Application/Party.RegisterView(ViewEngine) para registrar, como se muestra a continuación:

Cargue todas las plantillas con la extensión ".html" desde la carpeta "./views" y analícelas utilizando el paquete estándar html/template.

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

En el controlador de la ruta principal, utilice el método Context.View para renderizar o ejecutar una vista.

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

Utilice el método Context.ViewData en el middleware o controlador principal para vincular valores de Go con patrones de clave-valor en la vista.

Vincule {{.message}} con "¡Hola mundo!".

ctx.ViewData("message", "¡Hola mundo!")

Vinculación raíz:

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

// vinculación raíz como {{.Name}}

Utilice el método AddFunc del motor de vista preferido para agregar funciones de plantilla.

//       nombre de la función, parámetros de entrada, valor de retorno
tmpl.AddFunc("saludar", func(s string) string {
    return "¡Saludos " + s + "!"
})

Si desea recargar en cada solicitud, llame al método Reload del motor de vista.

tmpl.Reload(true)

Si desea usar plantillas incorporadas sin depender del sistema de archivos local, utilice la herramienta externa go-bindata y pase la función AssetFile() que genera como el primer parámetro de entrada al motor de vista preferido.

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

Código de ejemplo:

// Archivo: main.go
paquete principal

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

func main() {
    app := iris.Nuevo()

    // Analiza todas las plantillas con el sufijo ".html" desde la carpeta "./views"
    // Utiliza el paquete estándar `html/template` para el análisis
    tmpl := iris.HTML("./views", ".html")
    // Establece delimitadores personalizados
    tmpl.Delims("{{", "}}")
    // Habilita la recompilación para cambios locales en archivos de plantillas
    tmpl.Recargar(true)
    
    // Las funciones de plantilla predeterminadas incluyen:
    //
    // - {{ urlpath "miRutaNombrada" "parámetroDeRuta_siEsNecesario" }}
    // - {{ render "encabezado.html" . }}
    // Y la ruta relativa a la página actual:
    // - {{ render_r "encabezado.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // Registra una función de plantilla personalizada:
    tmpl.AddFunc("saludar", func(s string) string {
        return "¡Saludos " + s + "!"
    })
    
    // Registra el motor de vista en la aplicación,
    // esto cargará las plantillas.
    app.RegisterView(tmpl)
    
    // Método: GET
    // Recurso: http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // Vincula {{.message}} a "¡Hola mundo!"
        ctx.ViewData("message", "¡Hola mundo!")
        // Renderiza el archivo de plantilla: ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })
    
    app.Listen(":8080")
}
Página de saludo


{{.message}}
{{saludar "a ti"}}

Abre una nueva pestaña en tu navegador y visita http://localhost:8080.

El resultado renderizado debería ser el siguiente:

    Página de saludo


    ¡Hola mundo!
    ¡Saludos a ti!