通过 Golang 中的模板解析自定义变量

Posted

技术标签:

【中文标题】通过 Golang 中的模板解析自定义变量【英文标题】:Parse Custom Variables Through Templates in Golang 【发布时间】:2017-10-08 13:11:09 【问题描述】:

我是否可以在模板文件$title := "Login" 中设置一个变量,然后将其解析到另一个使用template "header" . 包含的文件?

我正在尝试的示例:

header.tmpl

define "header"
<title>.title</title>
end

login.tmpl

define "login"
<html>
    <head>
        $title := "Login"
        template "header" .
    </head>
    <body>
        Login Body!
    </body>
</html>
end

我怎样才能将这个自定义的 $title 变量解析到我的标题模板中?

【问题讨论】:

【参考方案1】:

正如@zzn 所说,不可能从一个模板中引用另一个模板中的变量。

实现您想要的一种方法是定义一个模板——它将从一个模板传递到另一个模板。

header.html define "header" <title>template "title"</title> end

login.html define "title"Loginend define "login" <html> <head> template "header" . </head> <body> Login Body! </body> </html> end

您还可以在调用“标题”模板(template header $title 甚至template header "index")时将标题作为管道传递,但这会阻止您向该模板传递任何其他内容。

【讨论】:

可能是最接近我正在寻找的东西。谢谢! :)【参考方案2】:

不,不可能将变量解析到另一个文件。

根据this:

变量的作用域扩展到声明它的控制结构(“if”、“with”或“range”)的“结束”操作,如果没有这样的控制,则扩展到模板的末尾结构体。 模板调用不会从其调用点继承变量。

【讨论】:

有没有其他方法可以做我正在尝试的事情? 在golang中定义title变量,传递给template.Execute函数。 我能想到的唯一其他方法是将header.tmpl 包含在template "header" "Title Here" 中,然后在header.tmpl 中我可以使用. 来访问该标题。唯一的问题是,如果我可以添加描述或其他一些数据(仅通过模板)会很好 其他人正在寻找答案...查看technosophos.com/2013/11/23/… - 对我来说最好的方法是创建两个单独的函数:getset 用于定义全局可访问的变量。跨度>

以上是关于通过 Golang 中的模板解析自定义变量的主要内容,如果未能解决你的问题,请参考以下文章

Golang 模板 - 使用模板变量作为范围循环内的全局变量

为 Jersey 代理客户端解析资源接口中的模板变量

模板继承 组件 自定义过滤器 静态文件 别名 反向解析

第268天学习打卡(知识点回顾 springboot视图解析和模板引擎)

ThinkPHP 3.2 模板中的Angularjs 的变量{{$first}} 无法被解析

微搭医美小程序官方模板解析