gpt4 book ai didi

html - Golang & Martini 代码块

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:36 29 4
gpt4 key购买 nike

我正在尝试定义代码块,如果它们被定义,这些代码块将被注入(inject)到基本模板中。我不想将一个页面上需要的所有脚本都包含到不需要它的另一个页面上。

我正在使用:

"github.com/go-martini/martini"
"github.com/martini-contrib/binding"
"github.com/martini-contrib/render"

基本上我想做的是:

在布局上:admin.tmpl:

<script src="jquery.min.js"></script>
<script src="scripts.min.js"></script>
{{ footer_extra }}

new.tmpl 上:

{{define "footer_extra"}}
<!-- scripts just for this page -->
<script src="script-1.js"></script>
<script src="script-2.js"></script>
<script src="script-3.js"></script>
{{end}}

当我改用模板时它似乎有效。

但我注意到我不能定义多个模板,这有点违背了我想要实现的目标。

index.tmpl

{{define "footer_extra"}}
<!-- scripts just for this page -->
<script src="script-1.js"></script>
<script src="script-2.js"></script>
{{end}}

new.tmpl

{{define "footer_extra"}}
<!-- scripts just for this page -->
<script src="script-3.js"></script>
<script src="script-4.js"></script>
{{end}}

layout.tmpl

<script src="main.js"></script>
{{template "footer_extra"}}

会抛出一个PANIC模板:模板“footer_extra”的重新定义

最佳答案

我知道这是违反直觉的,但出于性能原因,最好将所有 javascript 捆绑到几个文件中,并将它们包含在每个页面上。

但如果你还想这样做,有两种方法可以解决问题:

  1. 给另一个 footer_extra 一个不同的名称,然后在您的模板中明确引用它:

    <script src="jquery.min.js"></script>
    <script src="scripts.min.js"></script>
    {{ admin_footer_extra }}
  2. 将页脚作为您发送到模板的数据的一部分:

    var buf bytes.Buffer
    // or ParseFiles if that's how you're reading these
    tpl := template.Must(template.New("").Parse(tpls))
    // render the footer
    tpl.ExecuteTemplate(&buf, "footer_extra", nil)
    footer := buf.String()
    buf.Reset()
    // send the footer to the main template
    tpl.ExecuteTemplate(&buf, "index", map[string]interface{}{
    "Footer": template.HTML(footer),
    // ^ this makes it so go won't escape < & >
    })

    那么你的模板将只有:

    {{define "page1"}}
    {{.Footer}}
    {{end}}

关于html - Golang & Martini 代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30033170/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com