【问题标题】:Parse Custom Variables Through Templates in Golang通过 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 变量解析到我的标题模板中?

【问题讨论】:

    标签: go go-templates template-variables


    【解决方案1】:

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

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

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

    login.html {{define "title"}}Login{{end}} {{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 用于定义全局可访问的变量。跨度>
    猜你喜欢
    • 2014-09-20
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2018-10-12
    • 1970-01-01
    相关资源
    最近更新 更多