Go Web 编程入门:Go pongo2 模板引擎(下)

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

Go pongo2 迭代

for 语句用于迭代模板中的数据集合。

  1. 新建一个 words.tpl 文件:
{% for word in words -%}
    {{ word }}
{% endfor %}
  1. 在模板中,我们使用 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 过滤

可以将过滤器应用于数据以修改它们。在 | 之后应用过滤器特点。

  1. 更改 words.tpl 文件
{% for word in words -%}
    {{ word }} has {{ word | length }} characters
{% endfor %}
  1. 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)
}
  1. 在程序中,我们将一段单词传递给模板。我们打印每个单词及其大小。运行该程序:
只要 has 2 characters
对 has 1 characters
编码 has 2 characters
保持 has 2 characters
热爱 has 2 characters
! has 1 characters

Go pongo2 条件

可以使用 if/endif 指令创建条件。

  1. 新建一个 todo.tpl 文件:
{% for todo in todos -%}
    {% if todo.Done %}
        {{- todo.Title -}}
    {% endif %}
{% endfor %}

在模板文件中,我们使用 if 指令仅输出已完成的任务。


  1. 我们从一片待办事项中生成输出。在输出中,我们仅包含已完成的任务。
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)
}
  1. 运行代码:
$ go run main.go
写代码五小时
吃饭三餐
日更写文章

总结

这篇文章介绍了第三方模板库 pongo2,pongo2 是一种类似于 Django 语法的 Go 的模板语言。并介绍了从字符串和文件中两种方式获取文本,并介绍了 pongo2 的迭代、过滤和 if 条件的使用,并给出了每个代码案例,希望能对你有帮助。关于 pongo2 的更多用法请参考官方链接,还有更多基于 pongo2 的第三方扩展库,都值得一看,哪个方便用哪个。

网络异常,图片无法展示
|


感谢阅读,下一篇文章再见~

相关文章
|
8天前
|
存储 设计模式 安全
Go语言中的并发编程:从入门到精通###
本文深入探讨了Go语言中并发编程的核心概念与实践技巧,旨在帮助读者从理论到实战全面掌握Go的并发机制。不同于传统的技术文章摘要,本部分将通过一系列生动的案例和代码示例,直观展示Go语言如何优雅地处理并发任务,提升程序性能与响应速度。无论你是Go语言初学者还是有一定经验的开发者,都能在本文中找到实用的知识与灵感。 ###
|
10天前
|
缓存 前端开发 中间件
go语言中Web框架
【10月更文挑战第22天】
18 4
|
13天前
|
Serverless Go
Go语言中的并发编程:从入门到精通
本文将深入探讨Go语言中并发编程的核心概念和实践,包括goroutine、channel以及sync包等。通过实例演示如何利用这些工具实现高效的并发处理,同时避免常见的陷阱和错误。
|
26天前
|
安全 Go 开发者
破译Go语言中的并发模式:从入门到精通
在这篇技术性文章中,我们将跳过常规的摘要模式,直接带你进入Go语言的并发世界。你将不会看到枯燥的介绍,而是一段代码的旅程,从Go的并发基础构建块(goroutine和channel)开始,到高级模式的实践应用,我们共同探索如何高效地使用Go来处理并发任务。准备好,让Go带你飞。
|
1月前
|
前端开发 JavaScript 开发者
探索现代Web前端技术:React框架入门
【10月更文挑战第9天】 探索现代Web前端技术:React框架入门
|
28天前
|
存储 安全 Go
Go语言切片:从入门到精通的深度探索###
本文深入浅出地剖析了Go语言中切片(Slice)这一核心概念,从其定义、内部结构、基本操作到高级特性与最佳实践,为读者提供了一个全面而深入的理解。通过对比数组,揭示切片的灵活性与高效性,并探讨其在并发编程中的应用优势。本文旨在帮助开发者更好地掌握切片,提升Go语言编程技能。 ###
|
30天前
|
网络协议 安全 JavaScript
Web实时通信的学习之旅:WebSocket入门指南及示例演示
Web实时通信的学习之旅:WebSocket入门指南及示例演示
121 0
|
1月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
38 0
|
2月前
|
前端开发 开发者 Python
从零到一:Python Web框架中的模板引擎入门与进阶
在Web开发的广阔世界里,模板引擎是连接后端逻辑与前端展示的重要桥梁。对于Python Web开发者而言,掌握模板引擎的使用是从零到一构建动态网站或应用不可或缺的一步。本文将带你从基础入门到进阶应用,深入了解Python Web框架中的模板引擎。
31 3
|
2月前
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
55 11