การเรนเดอริ่งเทมเพลต

Iris มีการสนับสนุนสำหรับเครื่องมือสร้างเทมเพลตทั้งหมด 8 ชนิด ซึ่งผู้พัฒนายังสามารถใช้เครื่องมือสร้างเท็มเพลตของ 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" และนำไปใช้วิธีการปกติของ package 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 "Greetings " + 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" "pathParameter_ifNeeded" }}
    // - {{ render "header.html" . }}
    // และ path ที่สัมพันธ์กับหน้าปัจจุบัน:
    // - {{ 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")
}
หน้า Hi


{{.message}}
{{greet "to you"}}

เปิดแท็บใหม่ในเบราว์เซอร์ของคุณและไปที่ http://localhost:8080.

ผลลัพธ์ที่แสดง ควรเป็นดังนี้:

    หน้า Hi


    สวัสดีชาวโลก!
    ยินดีต้อนรับ to you!