Rendu de modèle

Iris a un support intégré pour huit moteurs de modèle, et les développeurs peuvent toujours utiliser n'importe quel moteur de modèle externe de langage Go car Context.ResponseWriter() est un io.Writer.

Tous les moteurs de modèle partagent une API commune, y compris l'analyse en utilisant des ressources intégrées, la mise en page et la mise en page spécifique à la Party, les fonctions de modèle et le rendu partiel.

# Nom Analyseur
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

Vous pouvez enregistrer un moteur de vue pour chaque Party. Utilisez la méthode Application/Party.RegisterView(ViewEngine) pour vous inscrire, comme indiqué ci-dessous :

Chargez tous les modèles avec l'extension ".html" du dossier "./views" et analysez-les en utilisant le package standard html/template.

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

Dans le gestionnaire de route principal, utilisez la méthode Context.View pour rendre ou exécuter une vue.

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

Utilisez la méthode Context.ViewData dans le middleware ou le gestionnaire principal pour lier des valeurs Go avec des modèles clé-valeur dans la vue.

Lie {{.message}} avec "Bonjour le monde!".

ctx.ViewData("message", "Bonjour le monde!")

Liaison racine :

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

// liaison racine comme {{.Nom}}

Utilisez la méthode AddFunc du moteur de vue préféré pour ajouter des fonctions de modèle.

//       nom de la fonction, paramètres d'entrée, valeur de retour
tmpl.AddFunc("saluer", func(s string) string {
    return "Salutations " + s + "!"
})

Si vous souhaitez recharger à chaque demande, appelez la méthode Reload du moteur de vue.

tmpl.Reload(true)

Si vous souhaitez utiliser des modèles intégrés sans dépendre du système de fichiers local, utilisez l'outil externe go-bindata et transmettez la fonction AssetFile() qu'il génère comme premier paramètre d'entrée au moteur de vue préféré.

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

Code d'exemple :

// Fichier : main.go
package main

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

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

    // Analyser tous les modèles avec le suffixe ".html" du dossier "./views"
    // Utiliser le package `html/template` standard pour l'analyse
    tmpl := iris.HTML("./views", ".html")
    // Définir des délimiteurs personnalisés
    tmpl.Delims("{{", "}}")
    // Activer la recompilation pour les modifications locales des fichiers de modèle
    tmpl.Reload(true)
    
    // Les fonctions de modèle par défaut incluent :
    //
    // - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
    // - {{ render "header.html" . }}
    // Et le chemin relatif vers la page actuelle :
    // - {{ render_r "header.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // Enregistrer une fonction de modèle personnalisée :
    tmpl.AddFunc("saluer", func(s string) string {
        return "Salutations " + s + "!"
    })
    
    // Enregistrer le moteur de vue auprès de l'application,
    // cela chargera les modèles.
    app.RegisterView(tmpl)
    
    // Méthode : GET
    // Ressource : http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // Lier {{.message}} à "Bonjour tout le monde !"
        ctx.ViewData("message", "Bonjour tout le monde !")
        // Rendre le fichier de modèle : ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })
    
    app.Listen(":8080")
}