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

时间:2017-09-02 21:01:34

标签: go html-framework-7 go-templates

代码语法冲突

Golang或Iris-go使用{{.VariableName}}来解释变量名称,或者他们使用{{}}来解析其他函数和代码。现在,当我在people.html页面中尝试使用framework7代码时

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

我收到错误about.html:26:命令

中出现意外的“#”

预期行为

我期待执行框架的JS代码

实际行为

我收到错误about.html:26:命令意外“#”,因为Golang正试图解析{{}}内的模板代码

如何让Golang不要解析特定语法中的任何内容,并将其用于javascript来处理它。

1 个答案:

答案 0 :(得分:1)

您可以使用Template.Delims()方法更改Go模板引擎使用的分隔符。如果你改变它,它就不会与framework7使用的delim碰撞。

将Go模板更改为[[]]的示例:

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}}

如果这对您不方便,或者您只是想要保留一些特定的操作,那就是未经处理的&#34;通过Go模板引擎,您也可以选择&#34; escape&#34; Go模板中的这些特定部分,通过将它们转换为仅为frame7输出类似操作的操作。例如,输出{{#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}}