การเรนเดอริ่งเทมเพลต
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!