Go web入门Go pongo2模板引擎

目录
  • 下载 pongo2 函数库
  • 从字符串中读取模板
  • 从文件中读取文本
  • Go pongo2 迭代
  • Go pongo2 过滤
  • Go pongo2 条件
  • 总结

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

模板引擎是一个库,旨在将模板与数据结合起来以生成文档。模板引擎用于生成大量电子邮件、源代码预处理或生成动态 HTML 页面。

模板由静态数据和动态区域组成。动态区域稍后被数据替换。渲染函数稍后将模板与数据结合起来。模板引擎用于将模板与数据模型相结合以生成文档。

pongo2 库是一个受 Django 模板引擎启发的 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 的字节中读取。

文档使用 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 渲染最终的字符串。在上下文中,我们为 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 := "宇宙之一粟", "不掉发的程序猿"
    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
宇宙之一粟是不掉发的程序猿

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 指令创建条件。

新建一个 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模板引擎的资料请关注我们其它相关文章!

(0)

相关推荐

  • Go Web框架gin的入门教程

    目前,基于Go的web框架也可谓是百花齐放了,之所以选择 gin ,没其他原因,就只是因为其在github上的star数是最多的,而且仅仅从README看,其文档也是相当丰富的. 安装gin 直接使用 go get github.com/gin-gonic/gin 即可. 官方README中提供了非常多的例子.例如最简单的实例代码: package main import "github.com/gin-gonic/gin" func main() { r := gin.Default

  • Go语言入门Go Web Fiber框架快速了解

    目录 Fiber 创建一个 HelloWorld Fiber 路由 Go Fiber 状态码 Go Fiber 发送短信 Go Fiber headers Go Fiber 发送文件 Go Fiber 教程展示了如何使用 Fiber 框架在 Golang 中创建简单的 Web 应用程序. Fiber是一个简单快速的 Go Web 框架. Fiber 专注于极致性能和低内存占用.它的灵感来自流行的 Express JS 框架. Fiber 创建一个 HelloWorld package main

  • GO web 数据库预处理的实现

    目录 什么是预处理? 那么预处理有啥好处? Go实现 MySQL 的事务 sqlx使用 gin + mysql + rest full api 上一篇文章我们进行了数据操作,都是使用占位符的方式来操作的 咱们其实可以使用 mysql 预处理的方式来操作这些 那么我们一起来看看什么是已处理呢? 什么是预处理? 了解什么是预处理,我们可以来对比一下,普通的 sql 语句执行过程和 预处理的执行过程 普通 sql 语句执行过程: 客户端对 SQL 语句进行 占位符 替换得到完整的 sql 语句 客户端

  • go web 处理表单的输入的说明

    一 目录结构 二 前端页面 文件名:login.html <!DOCTYPE html> <html> <head> <title></title> </head> <body> <form action="/login" method="post"> 用户名:<input type="text" name="username"

  • go web 预防跨站脚本的实现方式

    一 点睛 现在的网站包含大量的动态内容以提高用户体验,比过去要复杂得多.所谓动态内容,就是根据用户环境和需要,Web 应用程序能够输出相应的内容.动态站点会受到一种名为"跨站脚本攻击"(Cross Site Scripting, 安全专家们通常将其缩写成 XSS)的威胁,而静态站点则完全不受其影响. 攻击者通常会在有漏洞的程序中插入 JavaScript.VBScript. ActiveX 或 Flash 以欺骗用户.一旦得手,他们可以盗取用户帐户信息,修改用户设置,盗取或污染 coo

  • Go web入门Go pongo2模板引擎

    目录 下载 pongo2 函数库 从字符串中读取模板 从文件中读取文本 Go pongo2 迭代 Go pongo2 过滤 Go pongo2 条件 总结 Go pongo2 教程展示了如何使用 pongo2 模板引擎在 Golang 中使用模板. 模板引擎是一个库,旨在将模板与数据结合起来以生成文档.模板引擎用于生成大量电子邮件.源代码预处理或生成动态 HTML 页面. 模板由静态数据和动态区域组成.动态区域稍后被数据替换.渲染函数稍后将模板与数据结合起来.模板引擎用于将模板与数据模型相结合以

  • 一个基于flask的web应用诞生 使用模板引擎和表单插件(2)

    经过了第一章的内容,已经可以做出一些简单的页面,首先用这种方式做一个登录页面,首先要创建一个login的路由方法: @app.route("/login",methods=["GET"]) def login(): html="<form method='post'>" \ "<table>" \ "<tr><td>请输入用户名</td><td>

  • Node.js的Web模板引擎ejs的入门使用教程

    Node 开源模板的选择很多,但推荐像我这样的老人去用 EJS,有 Classic ASP/PHP/JSP 的经验用起 EJS 来的确可以很自然,也就是说,你能够在 <%...%> 块中安排 JavaScript 代码,利用最传统的方式 <%=输出变量%>(另外 <%-输出变量是不会对 & 等符号进行转义的).安装 EJS 命令如下: npm install ejs JS 调用 JS 调用的方法主要有两个: ejs.compile(str, options); //

  • Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图的方法

    本篇给大家介绍Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图. 静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源,使用Spring Boot 与 kotlin如何去支持这些静态资源?,很简单. 默认配置 Spring Boot默认提供静态资源目录位置需置于 classpath 下,目录名需符合如下规则: /static /public /resources /META-INF/resources 举例:我们可以在src/

  • node前端开发模板引擎Jade的入门

    随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时  javascript 被寄予了更大的期望,与此同时 javascript MVC 思想也开始流行起来.为了使用户界面与业务数据(内容)分离,就产生了『模板引擎』这个概念. 说的简单点,模板引擎就是一个字符串中有几个变量待定,通过模板引擎函数把数据动态的塞进去. 今天我们就来聊一聊 Jade 的使用方法和语法说明.Jade官网:jade-lang.com/ Jade 命令行工具

  • 使用TinyButStrong模板引擎来做WEB开发

    使用TinyButStrong模板引擎来做WEB开发 /google 的广告条--> TinyButStrong是应用于4.0.6及以上PHP版本的专业和易用的模板引擎! TinyButStrong 简称TBS,中译为"小强",它是一个PHP类.仅仅包含8个方法3个特性.文件大小100K左右,却能实现超大型模板引擎同样的功能.支持WYSIWYG编写html模板(Dreamweaver .FrontPage等)非常直观方便. 本文将介绍TBS的初步用法.TinyButStrong手

  • asp模板引擎终结者(WEB开发之ASP模式)

    阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一 般ASP模板加载模板文件(加载组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性. 内容:        当前,WEB开发已经变得非常火爆,因为各种应用,已经约来越要求表现层和逻辑层的分离.ASP和HTML夹在一起程序将变得难于维护,可读性也差.在PHP领域,模板引擎已经非常普遍,如phplib,SMARTY,等等.有使用替换方式的,也有编译方式的(SMARTY),它们都

  • Python Web开发模板引擎优缺点总结

    做 Web 开发少不了要与模板引擎打交道.我陆续也接触了 Python 的不少模板引擎,感觉可以总结一下了. 一.首先按照我的熟悉程度列一下:pyTenjin:我在开发 Doodle 和 91 外教时使用.Tornado.template:我在开发知乎日报时使用.PyJade:我在开发知乎日报时接触过.Mako:我只在一个早期就夭折了的小项目里用过.Jinja2:我只拿它做过一些 demo. 其他就不提了,例如 Django 的模板,据说又慢又难用,我根本就没接触过. 二.再说性能 很多测试就是

  • 详解Node.js模板引擎Jade入门

    Jade是Node.js的一个模板引擎,它借鉴了Haml的很多地方,所以语法上和Haml比较相近.并且,Jade也支持空格. 1.标签 在Jade里,一行开头的任何文本都被默认解释成HTML标签.并且你只需要你写开始标签--注意:不需要加"<>".因为Jade会帮我们渲染闭合和开始标签.例如: body div h1 Jade是Node.js的一个模板引擎 p 它借鉴了Haml的很多地方,所以语法上和Haml比较相近. div footer © Pandora 上面的Jad

  • Java SpringBoot模板引擎之 Thymeleaf入门详解

    目录 模板引擎简介 引入Thymeleaf模板引擎 分析Thymeleaf模板引擎 测试Thymeleaf模板引擎 1.编写一个TestController 2.编写一个测试页面 test.html 放在 templates 目录下 3.启动项目请求测试 4.结论 Thymeleaf入门: 1.修改测试请求,增加数据传输 2.使用thymeleaf 3.我们去编写下前端页面 4.启动测试! thymeleaf语法学习 1.使用任意的 th:attr 来替换Html中原生属性的值! 2.表达式语法

随机推荐