go - Framework7与Golang模板解析器的代码冲突

标签 go html-framework-7 go-templates

这个问题已经有了答案:
How do I escape “{{” and “}}” delimiters in Go templates?
4个答案
代码语法冲突
Golang或Iris Go使用.variable name来解释变量名,或者使用来解析其他函数和代码。现在,当我在people.html页面中尝试下面的framework7代码时

{{#each people}}
    <li>{{this}}</li>
{{/each}}

我得到了关于.html:26的错误:命令中出现意外的“”
预期行为
我期待着框架的JS代码被执行
实际行为
我得到了关于.html:26的错误:命令中出现了意外的“”,因为Golang正试图解析内的模板代码。
我如何才能要求golang不要解析特定语法中的任何内容,并让它为javascript处理。

最佳答案

您可以使用Template.Delims()方法更改Go模板引擎使用的熟食计。如果更改此项,它将不会与Framework7使用的熟食冲突。
示例将go template delims更改为[[]]

func main() {
    t := template.Must(template.New("").Delims("[[", "]]").Parse(tmpl))
    if err := t.Execute(os.Stdout, "test"); err != nil {
        panic(nil)
    }
}

const tmpl = `[[.]]
{{#each people}}
    <li>{{this}}</li>
{{/each}}`

输出(在Go Playground上尝试)
test
{{#each people}}
    <li>{{this}}</li>
{{/each}}

如果这对您来说不方便,或者您只想让Go模板引擎“未处理”某些特定操作,您也可以选择“转义”Go模板中的这些特定部分,将它们转换为仅为Framework7输出类似操作的操作。例如,要输出{{#each people}},请在Go模板中使用:
{{"{{#each people}}"}}

一个工作示例:
func main() {
    t := template.Must(template.New("").Parse(tmpl))
    if err := t.Execute(os.Stdout, "test"); err != nil {
        panic(nil)
    }
}

const tmpl = `{{.}}
{{"{{#each people}}"}}
    <li>{{"{{this}}"}}</li>
{{"{{/each}}"}}`

输出(在Go Playground上尝试):
test
{{#each people}}
    <li>{{this}}</li>
{{/each}}

关于go - Framework7与Golang模板解析器的代码冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46018166/

相关文章:

html - 模板继承加载空页面

go - 从链接读取JSON

Golang 一些图像在图像上传时旋转

javascript - 启动 Framework7 时出现错误 'Dom7 is not defined' - Vue app with Webpack

jquery - 如何在framework7中使用jquery插件

if-statement - 如果不是真的 (!true)

go - 具有多个字段的嵌入式结构的文字初始化

执行和回调

javascript - 将图片拟合到div中

json - Golang直接在模板中使用json