基本介绍

开发者可以自定义模板函数,全局绑定模板函数到指定的视图对象中。

也可以将自定义的对象赋值给模板,随后通过对象来调用其封装的方法。

使用示例

package main

import (
	"context"
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
)

// 用于测试的带参数的内置函数
func funcHello(name string) string {
	return fmt.Sprintf(`Hello %s`, name)
}

func main() {
	// 绑定全局的模板函数
	g.View().BindFunc("hello", funcHello)

	// 普通方式传参
	parsed1, err := g.View().ParseContent(context.TODO(), `{{hello "GoFrame"}}`, nil)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(parsed1))

	// 通过管道传参
	parsed2, err := g.View().ParseContent(context.TODO(), `{{"GoFrame" | hello}}`, nil)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(parsed2))
}

执行后,输出结果为:

Hello GoFrame
Hello GoFrame





Content Menu

  • No labels

2 Comments

  1. xt

    自定义函数如何获取上下文


  2. func (s *sView) Render(r *ghttp.Request, tpl string, data *model.View) {
    	var (
    		viewData = make(g.Map)
    	)
    	// 去掉空数据
    	viewData = gconv.Map(data)
    	for k, v := range viewData {
    		if g.IsEmpty(v) {
    			delete(viewData, k)
    		}
    	}
    	viewData["MainTpl"] = tpl
    	viewData["Pagination"] = &utility.Pagination{HttpRequest: r}
    
    	//响应码
    	if data.HttpCode > 0 {
    		r.Response.WriteHeader(data.HttpCode)
    	}
    	//绑定模板函数
    	r.GetView().BindFunc("NumberView",func(number int)int{
    		return number
    	}) 
    	r.Response.WriteTpl(tpl, viewData)
    
    	r.Exit()
    }


    自定义模板函数,报错