gonja icon indicating copy to clipboard operation
gonja copied to clipboard

Example to use args and kwargs function in template.

Open prasad83 opened this issue 1 year ago • 0 comments

In this example, merge_all function will be defined to receive args and kwargs arguments.

tpl, _ := gonja.FromString("<h1>{{merge_all('jack', 'jill', 'jimmy', went='up-the-hill')}}</h1>")
if data, e := tpl.Execute(gonja.Context{
	"merge_all": func(name *exec.VarArgs) (string, error) {
		vals := make([]string, 0)
		l := len(name.Args)
		for i, v := range name.Args {
			if i == l-1 {
				vals = append(vals, "and")
			} else if i > 0 {
				vals = append(vals, ",")
			}
			vals = append(vals, fmt.Sprintf("%v", v.Val))
		}
		for k, v := range name.KwArgs {
			vals = append(vals, fmt.Sprintf("%v %v", k, v.Val))
		}
		return strings.Join(vals, " "), nil
	},
}); e != nil {
	fmt.Println(e.Error())
	fmt.Println(errors.Unwrap(e))
} else {
	fmt.Println(data)
}

prasad83 avatar Aug 22 '24 17:08 prasad83