Визуализация шаблонов
В 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")
}