رندر کردن قالب
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
}
در middleware یا دستگاه اصلی، از متد Context.ViewData
برای بایند کردن مقادیر Go با الگوهای کلید-مقدار در نمایش استفاده کنید.
{{.message}}
را با "Hello world!"
بایند کنید.
ctx.ViewData("message", "Hello world!")
بایند روت:
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")
کد نمونه:
// File: main.go
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
// Parse all templates with the ".html" suffix from the "./views" folder
// Use the standard `html/template` package for parsing
tmpl := iris.HTML("./views", ".html")
// Set custom delimiters
tmpl.Delims("{{", "}}")
// Enable re-compilation for local template file changes
tmpl.Reload(true)
// Default template functions include:
//
// - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
// - {{ render "header.html" . }}
// And the relative path to the current page:
// - {{ render_r "header.html" . }}
// - {{ yield . }}
// - {{ current }}
// ثبت یک تابع سفارشی قالب:
tmpl.AddFunc("greet", func(s string) string {
return "سلام " + s + "!"
})
// ثبت موتور دید به برنامه،
// این قالبها را بارگیری میکند.
app.RegisterView(tmpl)
// Method: GET
// Resource: http://localhost:8080
app.Get("/", func(ctx iris.Context) {
// Bind {{.message}} to "Hello world!"
ctx.ViewData("message", "سلام دنیا!")
// Render the template file: ./views/hi.html
if err := ctx.View("hi.html"); err != nil {
ctx.HTML("%s", err.Error())
return
}
})
app.Listen(":8080")
}
صفحه سلام
{{.message}}
{{greet "به شما"}}
یک تب جدید در مرورگر خود باز کنید و به آدرس http://localhost:8080 بروید.
نتیجه رندر شده باید به صورت زیر باشد:
صفحه سلام
سلام دنیا!
سلام به شما!