رندر کردن قالب

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 بروید.

نتیجه رندر شده باید به صورت زیر باشد:

    صفحه سلام


    سلام دنیا!
    سلام به شما!