如何在Go模板中转义"{{"和"}}"分隔符?

Cod*_*er1 41 go go-templates

我正在使用AngularJS作为前端JS库,在Revel框架中使用Go模板来生成后端的标记.

但无论你去角的使用{{,并}}在他们的模板分隔符.如何在Go中将它们传递给AngularJS?

Mos*_*afa 64

{{"{{"}}
{{"}}"}}
Run Code Online (Sandbox Code Playgroud)

产生

{{
}}
Run Code Online (Sandbox Code Playgroud)

  • 不是在img src等的上下文中:http://go-vim.appspot.com/p/bLTDfe76-s (2认同)
  • @WesAlvaro 使用 `html/template` 预计会得到 url 编码结果。将`html/template`更改为`text/template`即可,请参考http://go-vim.appspot.com/p/Cj_n9mvnxg (2认同)

JSN*_*oob 37

一个简单的解决方法是使用

{{`{{Your.Angular.Data}}`}}
Run Code Online (Sandbox Code Playgroud)

  • 如果您的模板数据是 Go 字符串,则此方法不起作用。换句话说, `var templateData = \`{{\`{{Angular.Data}}\`}}\`` 在 Go 中是无效的(在这个简单的例子中,你不需要使用刻度字符串,但在现实世界的例子这很有用)。 (2认同)

bea*_*mit 28

我不知道如何逃避它,但你可以选择一个不同的分隔符,而不是使用Delims:

func (t *Template) Delims(left, right string) *Template
Run Code Online (Sandbox Code Playgroud)

根据邮件列表,这可能是最好的选择.争论的焦点是,如果你逃避它,你的模板将难以阅读,所以无论如何更改分隔符而不是试图破解它可能会更好.

  • @tjameson谢谢,这也帮助我找到了revel框架支持它作为配置.要将它改为`[[`和`]]`,它将在app.conf中被定义为`template.delimiters ="[[]]"`. (6认同)
  • 值得一提的是,这一变化[也可以在Angular](http://stackoverflow.com/q/12923521/1348195)方面完成. (5认同)