Renderowanie szablonów

Iris posiada wbudowane wsparcie dla ośmiu silników szablonów, a programiści mogą nadal korzystać z zewnętrznego silnika szablonów języka Go, ponieważ Context.ResponseWriter() jest obiektem typu io.Writer.

Wszystkie silniki szablonów mają wspólne API, obejmujące analizę za pomocą zasobów osadzonych, układ i układ związany z Partią, funkcje szablonów oraz częściowe renderowanie.

# Nazwa 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

Można zarejestrować silnik widoku dla każdej Partii. Aby zarejestrować, należy użyć metody Application/Party.RegisterView(ViewEngine), jak pokazano poniżej:

Załaduj wszystkie szablony z rozszerzeniem ".html" z foldera "./views" i analizuj za pomocą standardowego pakietu html/template.

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

W głównym obsługiwaczu trasy użyj metody Context.View do renderowania lub wykonania widoku.

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

Użyj metody Context.ViewData w oprogramowaniu pośredniczącym lub głównym obsługiwaczu do powiązania wartości Go z wzorcem klucz-wartość w widoku.

Powiąż {{.message}} z "Hello world!".

ctx.ViewData("message", "Hello world!")

Powiązanie główne:

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

// powiązanie główne jako {{.Name}}

Użyj metody AddFunc preferowanego silnika widoku do dodawania funkcji szablonów.

//       nazwa funkcji, parametry wejściowe, wartość zwracana
tmpl.AddFunc("greet", func(s string) string {
    return "Witaj " + s + "!"
})

Jeśli chcesz, aby odświeżał się przy każdym żądaniu, wywołaj metodę Reload silnika widoku.

tmpl.Reload(true)

Jeśli chcesz używać szablonów osadzonych bez polegania na lokalnym systemie plików, użyj zewnętrznego narzędzia go-bindata i przekaż wygenerowaną przez niego funkcję AssetFile() jako pierwszy parametr wejściowy do preferowanego silnika widoku.

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

Przykładowy kod:

// Plik: main.go
package main

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

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

    // Parsowanie wszystkich szablonów z rozszerzeniem ".html" z folderu "./views"
    // Użyj standardowego pakietu `html/template` do parsowania
    tmpl := iris.HTML("./views", ".html")
    // Ustawianie niestandardowych separatorów
    tmpl.Delims("{{", "}}")
    // Włącz rekompilację przy lokalnych zmianach plików szablonowych
    tmpl.Reload(true)
    
    // Domyślne funkcje szablonów obejmują:
    //
    // - {{ urlpath "mojaNazwaTrasy" "parametrSciezki_jezeliPotrzebny" }}
    // - {{ render "header.html" . }}
    // Oraz ścieżkę względną do bieżącej strony:
    // - {{ render_r "header.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // Rejestrowanie niestandardowej funkcji szablonu:
    tmpl.AddFunc("powitanie", func(s string) string {
        return "Witaj " + s + "!"
    })
    
    // Rejestrowanie silnika widoku w aplikacji,
    // to spowoduje załadowanie szablonów.
    app.RegisterView(tmpl)
    
    // Metoda: GET
    // Zasób: http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // Powiąż {{.message}} z "Witaj, świecie!"
        ctx.ViewData("message", "Witaj, świecie!")
        // Renderuj plik szablonu: ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })
    
    app.Listen(":8080")
}
Strona powitalna

{{.message}}
{{powitanie "dla Ciebie"}}

Otwórz nową kartę w przeglądarce i odwiedź http://localhost:8080.

Efekt renderowania powinien być następujący:

    Strona powitalna

    Witaj, świecie!
    Witaj dla Ciebie!