zoukankan      html  css  js  c++  java
  • httptemplate模板初识

    http-template模板初识

    html/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容。它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用html/template这个包。

    一、模板与渲染

    在一些前后端不分离的Web架构中,我们通常需要在后端将一些数据渲染到HTML文档中,从而实现动态的网页(网页的布局和样式大致一样,但展示的内容并不一样)效果。

    我们这里说的模板可以理解为事先定义好的HTML文档文件,模板渲染的作用机制可以简单理解为文本替换操作–使用相应的数据去替换HTML文档中事先准备好的标记。

    很多编程语言的Web框架中都使用各种模板引擎,比如Python语言中Flask框架中使用的jinja2模板引擎。

    二、Go语言的模板引擎

    Go语言内置了文本模板引擎text/template和用于HTML文档的html/template。它们的作用机制可以简单归纳如下:

    1. 模板文件通常定义为.tmpl.tpl为后缀(也可以使用其他的后缀),必须使用UTF8编码。
    2. 模板文件中使用{{}}包裹和标识需要传入的数据。
    3. 传给模板这样的数据就可以通过点号(.)来访问,如果数据是复杂类型的数据,可以通过{ { .FieldName }}来访问它的字段。
    4. {{}}包裹的内容外,其他内容均不做修改原样输出。

    三、模板引擎的使用

    Go语言模板引擎的使用可以分为三部分:定义模板文件、解析模板文件和模板渲染.

    定义模板文件

    其中,定义模板文件时需要我们按照相关语法规则去编写,后文会详细介绍。

    解析模板文件

    上面定义好了模板文件之后,可以使用下面的常用方法去解析模板文件,得到模板对象:

    func (t *Template) Parse(src string) (*Template, error)  // 解析字符串
    func ParseFiles(filenames ...string) (*Template, error)  // 解析文件
    func ParseGlob(pattern string) (*Template, error)  // 解析继承模板,提供父类模板名称
    

    当然,你也可以使用func New(name string) *Template函数创建一个名为name的模板,然后对其调用上面的方法去解析模板字符串或模板文件。

    模板渲染

    渲染模板简单来说就是使用数据去填充模板,当然实际上可能会复杂很多。

    func (t *Template) Execute(wr io.Writer, data interface{}) error // 渲染模板
    func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error // 继承时候指定渲染的模板
    

    四、模板使用

    定义模板文件

    我们按照Go模板语法定义一个helloTemplate.tmpl的模板文件,语法糖{{.}}内容如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Hello Template</title>
    </head>
    <body>
    <p>Hello {{.}}</p>
    </body>
    </html>
    

    解析和渲染模板文件

    然后我们创建一个main.go文件,在其中写下HTTP server端代码如下:

    package main
    
    import (
    	"fmt"
    	"net/http"
    	"text/template"
    )
    
    func helloTemplate(w http.ResponseWriter, r * http.Request)  {
    	// 2.解析指定文件生产模板对象
    	temp, err := template.ParseFiles("./helloTemplate.tmpl")
    	if err != nil{
    		fmt.Printf("create template failed err:%#v", err)
    		return
    	}
    
    	// 利用给定数据渲染模板,并将结果写入到w
    	temp.Execute(w, "hello template")
    
    
    }
    func main() {
    	http.HandleFunc("/helloTemplate", helloTemplate)
    	err := http.ListenAndServe(":9999",nil)
    	if err != nil{
    		fmt.Printf("http server run failed err:%#v", err)
    	}
    
    }
    
    

    将上面的main.go文件编译执行,然后使用浏览器访问http://127.0.0.1:9999就能看到页面上显示了“hello template”。

    image-20211109085749635

    image-20211109085737353

    随时修改html会随时展示

    image-20211109090031591

    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    WrapPanel虚拟化
    关于Windows执行cmd命令的坑之一
    C# .Net 获取当前电脑上的可移动磁盘
    关于WPF中资源字典的内存优化
    WPF获取ListBox、ListView之类列表的ScrollViewer实例
    C#事件与委托 yangan
    系统自动登录设置(适用所有操作系统) yangan
    Oracel小知识记录 yangan
    使用avaScript获取Url中的指定参数值 yangan
    Win7下破解ArcGIS 9.3方法 yangan
  • 原文地址:https://www.cnblogs.com/randysun/p/15621927.html
Copyright © 2011-2022 走看看