模版渲染的过程可以逆向进行吗?

BBX-Winner · · 1920 次点击
jan-bar
想要拥有,必定付出。
不知道我下面这种2次渲染能不能满足你的需求,第一次渲染的结果还是一个模板,第二次渲染时得到最终结果并且将第一次模板里面的数据取出来。 ```go package main import ( "bytes" "fmt" "text/template" ) func main() { t, err := template.New("ENC").Funcs(template.FuncMap{ "ENC": func(key, val string) string { return fmt.Sprintf("{{DEC \"%s\" \"%s\"}}", key, val) }, }).Parse(`user: {{ENC "user" .user}},pass: {{ENC "pass" .pass}}`) if err != nil { panic(err) } var str bytes.Buffer err = t.ExecuteTemplate(&str, "ENC", map[string]string{ "user": "张三", "pass": "admin", }) if err != nil { panic(err) } s0 := str.String() fmt.Println(s0) // 第一次渲染,但这次的结果不能直接使用 // 第二次渲染,将模板里面的数据取出到data中,并且生成最终渲染的结果 data := make(map[string]string) t, err = t.New("DEC").Funcs(template.FuncMap{ "DEC": func(key, val string) string { data[key] = val return val }, }).Parse(s0) if err != nil { panic(err) } str.Reset() err = t.ExecuteTemplate(&str, "DEC", nil) if err != nil { panic(err) } s1 := str.String() fmt.Println(data) // 从模板中取出的数据 fmt.Println(s1) // 最终正常渲染后使用的数据 } ```
#7
更多评论
tuzhiya
你好
不能的吧
#1
这个问题牛啊,就好像,给你长照片,你知道cmos是怎么造的一样
#2