欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go web入門Go pongo2模板引擎

 更新時(shí)間:2022年05月20日 15:34:30   作者:宇宙之一粟  
這篇文章主要為大家介紹了Go web編程入門Go pongo2模板引擎使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Go pongo2 教程展示了如何使用 pongo2 模板引擎在 Golang 中使用模板。

模板引擎是一個(gè)庫(kù),旨在將模板與數(shù)據(jù)結(jié)合起來(lái)以生成文檔。模板引擎用于生成大量電子郵件、源代碼預(yù)處理或生成動(dòng)態(tài) HTML 頁(yè)面。

模板由靜態(tài)數(shù)據(jù)和動(dòng)態(tài)區(qū)域組成。動(dòng)態(tài)區(qū)域稍后被數(shù)據(jù)替換。渲染函數(shù)稍后將模板與數(shù)據(jù)結(jié)合起來(lái)。模板引擎用于將模板與數(shù)據(jù)模型相結(jié)合以生成文檔。

pongo2 庫(kù)是一個(gè)受 Django 模板引擎啟發(fā)的 Go 模板引擎。

下載 pongo2 函數(shù)庫(kù)

使用如下命令:

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 函數(shù)呈現(xiàn)。這些函數(shù)接受一個(gè)上下文,它為模板提供常量、變量、實(shí)例或函數(shù)。

從字符串中讀取模板

pongo2.FromString 函數(shù)從字符串中讀取模板。如下代碼將生成一條簡(jiǎn)單的文本消息:

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)
}

要打印的變量放在 {{ }} 括號(hào)內(nèi)。

tpl, err := pongo2.FromString("Hello {{ name }}!")

接著,我們使用 Execute 渲染最終的字符串。在上下文中,我們?yōu)?name 變量傳遞一個(gè)值 “宇宙之一粟”:

res, err := tpl.Execute(pongo2.Context{"name": "宇宙之一粟"})

最后,運(yùn)行該代碼:

$ go run main.go         
Hello 宇宙之一粟~

如下圖:

再來(lái)看一個(gè)例子,我們可以傳遞兩個(gè)文本:

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)
}

運(yùn)行該代碼:

$ go run main.go
宇宙之一粟是程序猿??????

從文件中讀取文本

使用 ??pongo2.FromFile?? 函數(shù),我們從文件中讀取模板。

新建一個(gè) test.tpl 模板文件:

{{ name }}是{{ occupation }}

該示例生成一條簡(jiǎn)單的消息,同時(shí)從文件中讀取模板。寫好 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)
}

運(yùn)行該程序:

$ go run main.go
宇宙之一粟是不掉發(fā)的程序猿

Go pongo2 迭代

for 語(yǔ)句用于迭代模板中的數(shù)據(jù)集合。

新建一個(gè) words.tpl 文件:

{% for word in words -%}
    {{ word }}
{% endfor %}

在模板中,我們使用 for 指令來(lái)遍歷 words 數(shù)據(jù)結(jié)構(gòu)的元素??梢杂?- 字符去除空白字符。

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{"只要", "對(duì)", "編碼", "保持", "熱愛", "!"}
    ctx := pongo2.Context{"words": words}
    res, err := tpl.Execute(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

在程序中,我們將一段單詞傳遞給 tempate 引擎。我們得到一個(gè)單詞列表作為輸出。

$ go run main.go
只要
對(duì)
編碼
保持
熱愛
!

Go pongo2 過濾

可以將過濾器應(yīng)用于數(shù)據(jù)以修改它們。在 | 之后應(yīng)用過濾器特點(diǎn)。

更改 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{"只要", "對(duì)", "編碼", "保持", "熱愛", "!"}
    ctx := pongo2.Context{"words": words}
    res, err := tpl.Execute(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

在程序中,我們將一段單詞傳遞給模板。我們打印每個(gè)單詞及其大小。運(yùn)行該程序:

只要 has 2 characters
對(duì) has 1 characters
編碼 has 2 characters
保持 has 2 characters
熱愛 has 2 characters
! has 1 characters

Go pongo2 條件

可以使用 if/endif 指令創(chuàng)建條件。

新建一個(gè) todo.tpl 文件:

{% for todo in todos -%}
    {% if todo.Done %}
        {{- todo.Title -}}
    {% endif %}
{% endfor %}

在模板文件中,我們使用 if 指令僅輸出已完成的任務(wù)。

我們從一片待辦事項(xiàng)中生成輸出。在輸出中,我們僅包含已完成的任務(wù)。

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: "看書一小時(shí)", Done: false},
        {Title: "寫代碼五小時(shí)", 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)
}

運(yùn)行代碼:

$ go run main.go
寫代碼五小時(shí)
吃飯三餐
日更寫文章

總結(jié)

這篇文章介紹了第三方模板庫(kù) pongo2,pongo2 是一種類似于 Django 語(yǔ)法的 Go 的模板語(yǔ)言。并介紹了從字符串和文件中兩種方式獲取文本,并介紹了 pongo2 的迭代、過濾和 if 條件的使用,并給出了每個(gè)代碼案例,希望能對(duì)你有幫助。關(guān)于 pongo2 的更多用法請(qǐng)參考官方鏈接,還有更多基于 pongo2 的第三方擴(kuò)展庫(kù),都值得一看,哪個(gè)方便用哪個(gè)。

參考鏈接:

https://zetcode.com/golang/pongo2/

https://github.com/flosch/pongo2

以上就是Go語(yǔ)言編程入門Go pongo2模板引擎的詳細(xì)內(nèi)容,更多關(guān)于Go pongo2模板引擎的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang基于websocket通信tcp keepalive研究記錄

    golang基于websocket通信tcp keepalive研究記錄

    這篇文章主要為大家介紹了golang基于websocket通信tcp keepalive研究記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn)

    Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn)

    這篇文章主要介紹了Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Go語(yǔ)言操作redis數(shù)據(jù)庫(kù)的方法

    Go語(yǔ)言操作redis數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Go語(yǔ)言操作redis數(shù)據(jù)庫(kù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • go語(yǔ)言單例模式(Singleton)實(shí)例分析

    go語(yǔ)言單例模式(Singleton)實(shí)例分析

    這篇文章主要介紹了go語(yǔ)言單例模式(Singleton),實(shí)例分析了單例模式的原理與Go語(yǔ)言的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • golang中json的omitempty使用操作

    golang中json的omitempty使用操作

    這篇文章主要介紹了golang中json的omitempty使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-12-12
  • go語(yǔ)言beego框架web開發(fā)語(yǔ)法筆記示例

    go語(yǔ)言beego框架web開發(fā)語(yǔ)法筆記示例

    這篇文章主要為大家介紹了go語(yǔ)言beego框架web開發(fā)語(yǔ)法筆記示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • go字符串拼接方式及性能比拼小結(jié)

    go字符串拼接方式及性能比拼小結(jié)

    在golang中字符串的拼接方式有多種,本文將會(huì)介紹比較常用的幾種方式,并且對(duì)各種方式進(jìn)行壓測(cè),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 關(guān)于go-zero服務(wù)自動(dòng)收集問題分析

    關(guān)于go-zero服務(wù)自動(dòng)收集問題分析

    這篇文章主要介紹了關(guān)于go-zero服務(wù)自動(dòng)收集問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Golang使用協(xié)程實(shí)現(xiàn)批量獲取數(shù)據(jù)

    Golang使用協(xié)程實(shí)現(xiàn)批量獲取數(shù)據(jù)

    服務(wù)端經(jīng)常需要返回一個(gè)列表,里面包含很多用戶數(shù)據(jù),常規(guī)做法當(dāng)然是遍歷然后讀緩存。使用Go語(yǔ)言后,可以并發(fā)獲取,極大提升效率,本文就來(lái)聊聊具體的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助
    2023-02-02
  • 分析Go語(yǔ)言接口的設(shè)計(jì)原則

    分析Go語(yǔ)言接口的設(shè)計(jì)原則

    interface是Go語(yǔ)言的基礎(chǔ)特性之一, 可以理解為對(duì)一種類型的規(guī)范或者約束。他跟java、c++不同, Go語(yǔ)言實(shí)現(xiàn)接口不需要顯示說明實(shí)現(xiàn)了哪個(gè)接口, 也沒有繼承或者子類或者implement關(guān)鍵字。只是通過約定的形式, 隱式的實(shí)現(xiàn)接口中的方法即可
    2021-06-06

最新評(píng)論