【问题标题】:In a template, how can I have a counter?在模板中,我怎样才能有一个计数器?
【发布时间】:2016-06-04 04:01:18
【问题描述】:

我的项目需要基本的增量算法和循环,以保持模板的可读性并使用值填充 9x9 网格。这些值存储在字符串数组中,因此必须能够控制索引。

这是我定义了两个模板函数的处理程序:

func HomeHandler(w http.ResponseWriter, req *http.Request) {
    t := template.New("home.html").Funcs(template.FuncMap{
        "loop": func(n int) []struct{} {
            return make([]struct{}, n)
        },
    }).Funcs(template.FuncMap{
        "inc": func(n int) int {
            return n + 1
        },
    })

    t, err := t.ParseFiles("templates/home.html")

    if err != nil {
        log.Print("template/home error:", err)
    }
    t.ExecuteTemplate(w, "home.html", nil)
}

要创建网格,我使用循环函数,如下所示:

{{ range loop 3}}
<tbody>
    {{ range loop 3}}
    <tr>
        {{ range loop 9}} 
        <td> <input value="1" type="text" name="value[]" maxlength="1" size="1">
        {{end}}
    {{end}}
{{end}}

但是,我想使用我的数据将 input 元素的 value 属性设置为正确的值。我相信我可以通过以下方式访问索引:

{{index .MyArray 3}}

我将用我需要能够正确递增的计数器替换“3”。

不幸的是,我似乎无法正确地重新分配变量,因为我最多只能将它从 0 递增到 1。

这是我的计数器模板:

{{$count := 0}}
{{ range loop 3}}
<tbody>
    {{ range loop 3}}
    <tr>
        {{ range loop 9}} 
        {{$count := inc $count}}
        <td> <input value="1" type="text" name="value[]" maxlength="1" size="1">
        {{end}}
    {{end}}
{{end}}

【问题讨论】:

    标签: go go-templates


    【解决方案1】:

    反之亦然,因为模板可以轻松完成对实际数据的测距?你可以不用loopinc 并从

    开始
    {{ range $index, $value := .MyArray }}
    <td><input value="{{ $value }}" type="text" name="value[]" maxlength="1" size="1">
    {{ end }}
    

    这将为您提供所需的所有输入,但没有周围的标记,那么我们如何获得呢?一点点模运算。像这样定义一个模板函数:

    "each": func(interval, n int) bool {
        return n % interval == 0
    }
    

    那么我们就可以把事情搞定了:

    {{ range $index, $value := .MyArray }}
    {{ if each 27 $index }}<tbody>{{ end }}
    {{ if each 9 $index }}<tr>{{ end }}
    <td><input value="{{ $value }}" type="text" name="value[]" maxlength="1" size="1">
    {{ end }}
    

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2018-09-29
      • 1970-01-01
      相关资源
      最近更新 更多