为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中使用来自常量字符串变量的嵌套模板?

如何在 Go 中使用来自常量字符串变量的嵌套模板?

Go
红颜莎娜 2021-06-19 14:01:12
我一直在尝试在 Go 中使用嵌套模板,但是示例或帮助文档对我没有帮助,另外 3 个博客中的示例不是我正在寻找的(一个很接近,也许是唯一的方法,但我想制作当然)好的,所以我的代码是针对 App Engine 的,在这里我将对urlfetch服务器执行一个操作,然后我想显示一些结果,例如Response、标题和正文。const statusTemplate = `{{define "RT"}}Status      - {{.Status}}Proto       - {{.Proto}}{{end}}{{define "HT"}}{{range $key, $val := .}}{{$key}} - {{$val}}{{end}}{{end}}{{define "BT"}}{{.}}{{end}}{{define "MT"}}<html>    <body>        <pre>-- Response --{{template "RT"}}--  Header  --{{template "HT"}}--   Body   --{{template "BT"}}        </pre>    </body></html>{{end}}{{template "MT"}}`func showStatus(w http.ResponseWriterm r *http.Request) {    /*     *  code to get:     *  resp as http.Response     *  header as a map with the header values     *  body as an string wit the contents     */    t := template.Must(template.New("status").Parse(statusTemplate)    t.ExecuteTemplate(w, "RT", resp)    t.ExecuteTemplate(w, "HT", header)    t.ExecuteTemplate(w, "BT", body)    t.Execute(w, nil)}我的代码实际上输出了具有正确值的 RT、HT 和 BT 模板,然后将 MT 模板输出为空(MT 代表主模板)。那么...如何使用字符串变量中的嵌套形式,以便上述示例有效?
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我认为您尝试使用嵌套模板的方法是错误的。如果你想.在嵌套模板中定义,你必须为嵌套模板的调用提供一个参数,就像你对ExecuteTemplate函数所做的一样:


{{define "RT"}}

Status      - {{.Status}}

Proto       - {{.Proto}}

{{end}}

{{define "HT"}}

{{range $key, $val := .}}

{{$key}} - {{$val}}

{{end}}

{{end}}

{{define "BT"}}

{{.}}

{{end}}

{{define "MT"}}

<html>

    <body>

        <pre>

-- Response --

{{template "RT" .Resp}}


--  Header  --

{{template "HT" .Header}}


--   Body   --

{{template "BT" .Body}}

        </pre>

    </body>

</html>

{{end}}

{{template "MT"}}

您似乎错过的重要部分是模板不封装状态。当您执行模板时,引擎会评估给定参数的模板,然后写出生成的文本。它不会保存参数或为将来调用而生成的任何内容。


文档

文档的相关部分:


行动

这是操作列表。“参数”和“管道”是对数据的评估,详细定义如下。


...


{{template "name"}}

  The template with the specified name is executed with nil data.


{{template "name" pipeline}}

  The template with the specified name is executed with dot set

  to the value of the pipeline.


...

我希望这可以解决问题。


查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信