禁用模板内的方法评估
Disable method evaluation inside template
我正在使用 Go 进行模板评估,以下是我的用例。
我们的应用程序要求客户在文本中包含基于前缀的占位符。
例如:
my name is {$.PRE.FIRSTNAME}
这将自动替换为他们的名字,这只是一个简单的文本,会有更复杂的文本由客户输入。它甚至可以是 HTML.
以下是代码片段
在这里,第一个 templateText 工作完美文件,第二个评论的文件不工作。它抛出一个异常,说明函数未定义。
package main
import (
"bytes"
"html/template"
"log"
)
// OuterObject object
type OuterObject struct {
PRE *InnerObject
}
// InnerObject macro object
type InnerObject struct {
FIRSTNAME, LASTNAME string
}
func main() {
// This works perfectly.
templateText := "my name is {$.PRE.FIRSTNAME} "
// templateText := "my name is {$.PRE.FIRSTNAME} ().push(function() { globalAml.display('sss') };"
//
// Above templateText fails with exception :
// function "globalAml" not defined
//
o := &OuterObject{
PRE: &InnerObject{
FIRSTNAME: "fName",
LASTNAME: "lName",
},
}
var doc bytes.Buffer
t, err := template.New("test").Delims("{", "}").Parse(templateText)
if err != nil {
log.Fatal("Error parsing tag", err)
}
err1 := t.Execute(&doc, o)
if err1 != nil {
log.Println("Error Execute tag", err1)
}
log.Println("Final text ", doc.String())
}
谁能帮我忽略方法调用,只替换基于前缀的占位符。
您的第二次替换失败,因为 {
和 }
是模板分隔符。您需要引用它们才能完成这项工作:
templateText := "my name is {$.PRE.FIRSTNAME} ().push(function() {`{`} globalAml.display('sss') {`}`};"
我暂时能够通过将代码片段更改为以下内容来处理这种情况:
t, err := template.New("test").Delims("{$", "}").Parse(templateText)
我知道如果客户输入包含上述分隔符的文本,这将失败。
非常感谢,伙计们。
我正在使用 Go 进行模板评估,以下是我的用例。
我们的应用程序要求客户在文本中包含基于前缀的占位符。
例如:
my name is {$.PRE.FIRSTNAME}
这将自动替换为他们的名字,这只是一个简单的文本,会有更复杂的文本由客户输入。它甚至可以是 HTML.
以下是代码片段
在这里,第一个 templateText 工作完美文件,第二个评论的文件不工作。它抛出一个异常,说明函数未定义。
package main
import (
"bytes"
"html/template"
"log"
)
// OuterObject object
type OuterObject struct {
PRE *InnerObject
}
// InnerObject macro object
type InnerObject struct {
FIRSTNAME, LASTNAME string
}
func main() {
// This works perfectly.
templateText := "my name is {$.PRE.FIRSTNAME} "
// templateText := "my name is {$.PRE.FIRSTNAME} ().push(function() { globalAml.display('sss') };"
//
// Above templateText fails with exception :
// function "globalAml" not defined
//
o := &OuterObject{
PRE: &InnerObject{
FIRSTNAME: "fName",
LASTNAME: "lName",
},
}
var doc bytes.Buffer
t, err := template.New("test").Delims("{", "}").Parse(templateText)
if err != nil {
log.Fatal("Error parsing tag", err)
}
err1 := t.Execute(&doc, o)
if err1 != nil {
log.Println("Error Execute tag", err1)
}
log.Println("Final text ", doc.String())
}
谁能帮我忽略方法调用,只替换基于前缀的占位符。
您的第二次替换失败,因为 {
和 }
是模板分隔符。您需要引用它们才能完成这项工作:
templateText := "my name is {$.PRE.FIRSTNAME} ().push(function() {`{`} globalAml.display('sss') {`}`};"
我暂时能够通过将代码片段更改为以下内容来处理这种情况:
t, err := template.New("test").Delims("{$", "}").Parse(templateText)
我知道如果客户输入包含上述分隔符的文本,这将失败。
非常感谢,伙计们。