当前位置: 首页 > 面试题库 >

从另一个模板中获取go模板的值

岳谦
2023-03-14
问题内容

我有两个模板T1和T2。我想获取T1的输出,并在T2内对其进行一些额外的处理。我的问题是:

如何将T1的输出存储在T2的变量中?这有可能吗?

这是一些伪模板:

{{define "T1"}}
    {{ printf "%s-%s" complex stuff }}
{{end}}
{{define "T2"}}
    {{ $some_var := output_from_template "T1"}}  <<<<<<<<<<<
    {{ etc }}
{{end}}

问题答案:

没有内置支持将模板结果存储在模板变量中,仅用于包含结果。

但是,您可以使用所需的任何复杂功能注册自定义功能。您可以注册一个GetOutput函数,该函数将执行由其名称标识的模板,并且可以将结果返回为string,可以将其存储在模板变量中。

这样做的例子:

func main() {
    t := template.New("")

    t = template.Must(t.Funcs(template.FuncMap{
        "GetOutput": func(name string) (string, error) {
            buf := &bytes.Buffer{}
            err := t.ExecuteTemplate(buf, name, nil)
            return buf.String(), err
        },
    }).Parse(src))

    if err := t.ExecuteTemplate(os.Stdout, "T2", nil); err != nil {
        panic(err)
    }
}

const src = `
{{define "T1"}}{{ printf "%s-%s" "complex" "stuff" }}{{end}}
{{define "T2"}}
    {{ $t1Out := (GetOutput "T1")}}
    {{ printf "%s-%s" "even-more" $t1Out }}
{{end}}`

输出将是(在Go Playground上尝试):

    even-more-complex-stuff

"T1"模板简单地输出"complex-stuff",和"T2"模板得到的输出"T1",并连接静态文本"even- more-"和结果"T1"

已注册的GetOutput函数获取要执行的模板的名称,将其输出定向到本地缓冲区以执行该模板,然后返回缓冲区的内容(以及其执行的可选错误)。



 类似资料:
  • 问题内容: 我有一个非常基本的模板(basic_template.html),并希望使用使用另一部分模板格式化的数据来填写。basic_template.html可能包含使用部分模板格式化的几件事。 我应该如何在views.py中构建代码? 我这样做的原因是稍后将使用Ajax填充。我这样做对吗? 问题答案: 你可以做: 另一个Django模板在哪里。在这里,你可以放入将用Ajax获得的HTML。

  • 模板代表了 freemarker.template.Template 实例。典型的做法是从 Configuration 实例中获取一个 Template 实例。无论什么时候你需要一个模板实例, 都可以使用它的 getTemplate 方法来获取。在 之前 设置的目录中的 test.ftl 文件中存储 示例模板,那么就可以这样来做: Template temp = cfg.getTemplate("

  • 我有以下问题:一个类模板a,有几个模板参数,我想构建一个类B,它以a为模板参数,并提取a的第一个模板参数,以便在某种方法中使用它(想想从std::vector 中提取int并返回默认的int{})。 我知道这种天真的方法不会编译,但我不知道如何实现这样的东西。感谢任何提示。

  • 我如何像这样?也许Boost支持它,如果不是C++或C++11中的新特性?

  • 我有一个XML,我必须循环测试结果和组件。当组件的类型与特定名称匹配时,我必须对该组件应用不同的模板。我为每种组件类型创建了一个XSL-to,具有不同的模板,例如:NORMALTEXTBOX。但是这些模板并没有被应用到组件块中。。。谁能帮我一下吗? XML XSL

  • 我正在使用在Django应用程序中创建语言前缀。 我的网址如下所示: 在我的基本模板中,我循环了所有可用的语言来显示语言切换链接。 在本例中,我将反转“主页”URL。有没有办法获取当前页面的翻译URL? 如果我在德语版的“联系人”页面上,我希望“fr”链接指向法语版本的“联系人”页面,而不是“主页”页面。