Go web入門Go pongo2模板引擎
Go pongo2 教程展示了如何使用 pongo2 模板引擎在 Golang 中使用模板。
模板引擎是一個庫,旨在將模板與數據結合起來以生成文檔。模板引擎用于生成大量電子郵件、源代碼預處理或生成動態(tài) HTML 頁面。
模板由靜態(tài)數據和動態(tài)區(qū)域組成。動態(tài)區(qū)域稍后被數據替換。渲染函數稍后將模板與數據結合起來。模板引擎用于將模板與數據模型相結合以生成文檔。
pongo2 庫是一個受 Django 模板引擎啟發(fā)的 Go 模板引擎。
下載 pongo2 函數庫
使用如下命令:
go get -u github.com/flosch/pongo2/v4
安裝成功后可以看到如下輸出:
go: downloading github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3 go: downloading github.com/flosch/pongo2/v4 v4.0.2 go: downloading gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b go: downloading github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e go: downloading github.com/kr/text v0.1.0 go: added github.com/flosch/pongo2/v4 v4.0.2
pongo2 在模板字符串中使用了各種分隔符:
{% %} - statements
{{ }} - expressions to print to the template output
{# #} - comments which are not included in the template output
# ## - line statements
模板可以從帶有 pongo2.FromString 的字符串、帶有 pongo2.FromFile 的文件或帶有pongo2.FromBytes 的字節(jié)中讀取。
文檔使用 Execute、ExecuteWriter 或 ExecuteBytes 函數呈現。這些函數接受一個上下文,它為模板提供常量、變量、實例或函數。
從字符串中讀取模板
pongo2.FromString 函數從字符串中讀取模板。如下代碼將生成一條簡單的文本消息:
package main
import (
"fmt"
"github.com/flosch/pongo2/v4"
"log"
)
func main() {
tpl, err := pongo2.FromString("Hello {{ name }}~")
if err != nil {
log.Fatal(err)
}
res, err := tpl.Execute(pongo2.Context{"name": "宇宙之一粟"})
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}要打印的變量放在 {{ }} 括號內。
tpl, err := pongo2.FromString("Hello {{ name }}!")
接著,我們使用 Execute 渲染最終的字符串。在上下文中,我們?yōu)?name 變量傳遞一個值 “宇宙之一粟”:
res, err := tpl.Execute(pongo2.Context{"name": "宇宙之一粟"})
最后,運行該代碼:
$ go run main.go Hello 宇宙之一粟~
如下圖:

再來看一個例子,我們可以傳遞兩個文本:
package main
import (
"fmt"
"github.com/flosch/pongo2/v4"
"log"
)
func main() {
tpl, err := pongo2.FromString("{{ name }}是{{ occupation }}")
if err != nil {
log.Fatal(err)
}
name, occupation := "宇宙之一粟", "程序猿??????"
ctx := pongo2.Context{"name": name, "occupation": occupation}
res, err := tpl.Execute(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}運行該代碼:
$ go run main.go 宇宙之一粟是程序猿??????
從文件中讀取文本
使用 ??pongo2.FromFile?? 函數,我們從文件中讀取模板。
新建一個 test.tpl 模板文件:
{{ name }}是{{ occupation }}
該示例生成一條簡單的消息,同時從文件中讀取模板。寫好 main.go 文件:
package main
import (
"fmt"
"github.com/flosch/pongo2/v4"
"log"
)
func main() {
tpl, err := pongo2.FromFile("test.tpl")
if err != nil {
log.Fatal(err)
}
name, occupation := "宇宙之一粟", "不掉發(fā)的程序猿"
ctx := pongo2.Context{"name": name, "occupation": occupation}
res, err := tpl.Execute(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}運行該程序:
$ go run main.go 宇宙之一粟是不掉發(fā)的程序猿
Go pongo2 迭代
for 語句用于迭代模板中的數據集合。
新建一個 words.tpl 文件:
{% for word in words -%}
{{ word }}
{% endfor %}
在模板中,我們使用 for 指令來遍歷 words 數據結構的元素??梢杂?- 字符去除空白字符。
package main
import (
"fmt"
"github.com/flosch/pongo2/v4"
"log"
)
func main() {
tpl, err := pongo2.FromFile("words.tpl")
if err != nil {
log.Fatal(err)
}
words := []string{"只要", "對", "編碼", "保持", "熱愛", "!"}
ctx := pongo2.Context{"words": words}
res, err := tpl.Execute(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
在程序中,我們將一段單詞傳遞給 tempate 引擎。我們得到一個單詞列表作為輸出。
$ go run main.go 只要 對 編碼 保持 熱愛 !
Go pongo2 過濾
可以將過濾器應用于數據以修改它們。在 | 之后應用過濾器特點。
更改 words.tpl 文件
{% for word in words -%}
{{ word }} has {{ word | length }} characters
{% endfor %}
main 文件:
package main
import (
"fmt"
"github.com/flosch/pongo2/v4"
"log"
)
func main() {
tpl, err := pongo2.FromFile("words.tpl")
if err != nil {
log.Fatal(err)
}
words := []string{"只要", "對", "編碼", "保持", "熱愛", "!"}
ctx := pongo2.Context{"words": words}
res, err := tpl.Execute(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
在程序中,我們將一段單詞傳遞給模板。我們打印每個單詞及其大小。運行該程序:
只要 has 2 characters 對 has 1 characters 編碼 has 2 characters 保持 has 2 characters 熱愛 has 2 characters ! has 1 characters
Go pongo2 條件
可以使用 if/endif 指令創(chuàng)建條件。
新建一個 todo.tpl 文件:
{% for todo in todos -%}
{% if todo.Done %}
{{- todo.Title -}}
{% endif %}
{% endfor %}
在模板文件中,我們使用 if 指令僅輸出已完成的任務。
我們從一片待辦事項中生成輸出。在輸出中,我們僅包含已完成的任務。
package main
import (
"fmt"
"github.com/flosch/pongo2/v4"
"log"
)
type Todo struct {
Title string
Done bool
}
type Data struct {
Todos []Todo
}
func main() {
tpl, err := pongo2.FromFile("todo.tpl")
if err != nil {
log.Fatal(err)
}
todos := []Todo{
{Title: "看書一小時", Done: false},
{Title: "寫代碼五小時", Done: true},
{Title: "吃飯三餐", Done: true},
{Title: "不加班", Done: false},
{Title: "日更寫文章", Done: true},
}
ctx := pongo2.Context{"todos": todos}
res, err := tpl.Execute(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}運行代碼:
$ go run main.go 寫代碼五小時 吃飯三餐 日更寫文章
總結
這篇文章介紹了第三方模板庫 pongo2,pongo2 是一種類似于 Django 語法的 Go 的模板語言。并介紹了從字符串和文件中兩種方式獲取文本,并介紹了 pongo2 的迭代、過濾和 if 條件的使用,并給出了每個代碼案例,希望能對你有幫助。關于 pongo2 的更多用法請參考官方鏈接,還有更多基于 pongo2 的第三方擴展庫,都值得一看,哪個方便用哪個。

參考鏈接:
https://zetcode.com/golang/pongo2/
https://github.com/flosch/pongo2
以上就是Go語言編程入門Go pongo2模板引擎的詳細內容,更多關于Go pongo2模板引擎的資料請關注腳本之家其它相關文章!
相關文章
如何使用工具自動監(jiān)測SSL證書有效期并發(fā)送提醒郵件
本文介紹了如何開發(fā)一個工具,用于每日檢測SSL證書剩余有效天數并通過郵件發(fā)送提醒,工具基于命令行,通過SMTP協議發(fā)送郵件,需配置SMTP連接信息,本文還提供了配置文件樣例及代碼實現,幫助用戶輕松部署和使用該工具2024-10-10

