我正在使用 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())
}
誰能幫我忽略方法呼叫,只是替換基于前綴的占位符。
uj5u.com熱心網友回復:
通過將代碼片段更改為以下內容,我暫時能夠處理這種情況:
t, err := template.New("test").Delims("{$", "}").Parse(templateText)
我知道如果客戶輸入包含上述分隔符的文本,這將失敗。
非常感謝,伙計們。
uj5u.com熱心網友回復:
您的第二次替換失敗,因為{and}是模板分隔符。您需要參考它們來完成這項作業:
templateText := "my name is {$.PRE.FIRSTNAME} ().push(function() {`{`} globalAml.display('sss') {`}`};"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405360.html
標籤:
