我想使用一个模板函数扩展默认的Golang模板函数,该模板函数呈现另一个Golang模板,而该模板也应该可以访问相关函数。
下面的演示案例应该创建一个< code>include模板函数,该函数呈现一个给定的模板,该模板也可以包含相同的< code>include函数。然而,这个例子(理所当然地)引发了一个初始化周期错误。
Golang 模板函数是否可以在引用自身时渲染另一个模板?
https://play.golang.org/p/hml-GDhV1HI
package main
import (
"bytes"
"errors"
html_template "html/template"
"os"
)
var includeFuncs = map[string]interface{}{
"include": func(templatePath string, data interface{}) (string, error) {
templatePath = "templates/" + templatePath
if _, err := os.Stat(templatePath); err != nil {
return "", errors.New("Unable to find the template file " + templatePath)
}
var renderedTpl bytes.Buffer
tpl, err := html_template.New(templatePath).Funcs(GetHTMLIncludeFuncs()).Parse(templatePath)
if err != nil {
return "", err
}
if err := tpl.Execute(&renderedTpl, data); err != nil {
return "", err
}
return renderedTpl.String(), nil
},
}
func GetHTMLIncludeFuncs() html_template.FuncMap {
return html_template.FuncMap(includeFuncs)
}
使用init()
:
var includeFuncs = map[string]interface{}{}
func includeFunc(templatePath string, data interface{}) (string, error) {...}
func init() {
includeFuncs["include"]=includeFunc
}
在原始帖子中,您会陷入初始化循环,因为在执行开始之前,运行时必须初始化所有初始化变量,编译器会检测到初始化循环。
使用上面的解决方案,初始化可以在程序启动之前完成,因为函数映射是空的。在< code>main开始运行之前,< code>init函数运行并使用函数初始化地图。
6.1 渲染模板 一旦你拥有一个模版文件,你可以通过给一个map来给它传递数据。 map是一个变量及赋予的值的集合,模板使用它来得到变量的值,或者对于块标签求值。 它的渲染函数有一个可选的变量键值对map 通过 ctx.Render() 方法来渲染模板,例如: func (r *Render) Serve(ctx *faygo.Context) error { return ctx.Ren
Tango默认核心不包含模板渲染功能,在官方中间件中包含两个渲染引擎中间件,一个是 Go标准模板引擎, 另一个是 Pongo2模板引擎
在控制器里模板渲染最常用的方法是display,在CMF中支持如下的模板渲染方式: //不带任何参数 $this->display(); 此种方式系统会自动判断模板路径,并渲染出模板内容,此种方式模板路径是:主题名/应用名/控制器名/操作名+模板文件后缀名; $this->display('edit'); 此种方式表示调用此控制器下的edit操作的模板; $this->display(':in
Tpongo2 中间件是 pongo2.v3 模板引擎的 Tango 支持。 安装 go get github.com/tango-contrib/tpongo2 示例 package main import ( "github.com/lunny/tango" "gopkg.in/flosch/pongo2.v3" "github.com/tango-contrib/tp
问题内容: 我正在做一个Flask应用程序。我有一个登录区域,一个博客区域。如果要获取用户的登录名,我将呈现登录模板。但这不会呈现必须显示在登录区域下方的博客模板。 我将尝试使其更加清晰: 现在我有一个扩展它,并进入登录块。我有一个进入。如何同时渲染两者?当我这样做时,我只能在login.html或之一上调用它。 请帮帮我。如果你需要,我会提供更多详细信息。 问题答案: 你可能会以错误的方式考虑布
说明 调用方法: $.f2e.util.render(temp,data,fn,helper); 函数说明: 调用template渲染模板,依赖于artTemplate库 参数说明: 参数名 类型 说明 备注 temp string html字符串 无 data object 参数名 无 fn function 回调函数 无 helper function artTemplate自定义方法 无