Визуализация шаблонов

В Iris встроена поддержка восьми шаблонизаторов, и разработчики все еще могут использовать любой внешний шаблонизатор языка Go, потому что Context.ResponseWriter() является io.Writer.

Все шаблонизаторы используют общий API, включая разбор с использованием встроенных ресурсов, компоновку и компоновку специфическую для Party, функции шаблонов и частичную визуализацию.

# Название Парсер
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

Вы можете зарегистрировать шаблонизатор для каждой Party. Используйте метод Application/Party.RegisterView(ViewEngine) для регистрации, как показано ниже:

Загрузите все шаблоны с расширением ".html" из папки "./views" и разберите их с помощью стандартного пакета html/template.

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

В основном обработчике маршрута используйте метод Context.View для визуализации или выполнения представления.

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

Используйте метод Context.ViewData в промежуточном ПО или основном обработчике для связывания значений Go с шаблоном по ключевым шаблонам.

Свяжите {{.message}} с "Привет, мир!".

ctx.ViewData("message", "Привет, мир!")

Корневое связывание:

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

// корневое связывание как {{.Name}}

Используйте метод AddFunc для добавления функций шаблонов в предпочтительный шаблонизатор.

//       название функции, входные параметры, возвращаемое значение
tmpl.AddFunc("greet", func(s string) string {
    return "Привет " + s + "!"
})

Если вы хотите перезагружать при каждом запросе, вызовите метод Reload шаблонизатора.

tmpl.Reload(true)

Если вы хотите использовать встроенные шаблоны без зависимости от локальной файловой системы, используйте внешний инструмент go-bindata и передайте функцию AssetFile(), которую он генерирует, как первый входной параметр в предпочтительный шаблонизатор.

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

Пример кода:

// Файл: main.go
package main

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

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

    // Разбор всех шаблонов с суффиксом ".html" из папки "./views"
    // Используем стандартный пакет `html/template` для разбора
    tmpl := iris.HTML("./views", ".html")
    // Установка пользовательских разделителей
    tmpl.Delims("{{", "}}")
    // Включение повторной компиляции при локальных изменениях файлов шаблонов
    tmpl.Reload(true)
    
    // Стандартные функции шаблона:
    //
    // - {{ urlpath "myNamedRoute" "путьПараметр_поНадобности" }}
    // - {{ render "header.html" . }}
    // И относительный путь к текущей странице:
    // - {{ render_r "header.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // Регистрация пользовательской функции шаблона:
    tmpl.AddFunc("greet", func(s string) string {
        return "Приветствую " + s + "!"
    })
    
    // Регистрация движка просмотра в приложении,
    // это загрузит шаблоны.
    app.RegisterView(tmpl)
    
    // Метод: GET
    // Ресурс: http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // Привязываем {{.message}} к "Привет, мир!"
        ctx.ViewData("message", "Привет, мир!")
        // Отображение файла шаблона: ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })
    
    app.Listen(":8080")
}