标签: go-templates

在Javascript中引用Go数组

我有一个Golang数组,我正在传递给前端的html文件.

我知道

'{{ index .Array 0}}' 
Run Code Online (Sandbox Code Playgroud)

工作并从数组中提取第一个元素.但我想做一个Javascript for循环并打印数组中的每个元素,就像这样

<script type="text/javascript">
function loop() {

    html = ""
    for(var i = 0; i<5; i++) {
        html += "{{ index .Array " + i + "}}";
      }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.关于分离go数组索引字符串的东西,HTML/Javascript不喜欢它,它不会加载.

这是一个语法错误,我无法确定.

有任何想法吗?

html javascript go go-templates

3
推荐指数
1
解决办法
1756
查看次数

Golang模板:上下文中的内容是什么?

我想看看传递给模板的上下文中的内容.我所做的基本上就是把点放在HTML中:

{{$.}}

HTML呈现时我得到的是:

{http://localhost:1315/blog/index.xml 0xc08fdf36g0 map[Pages:[]] Blog [] map[] 2016-04-07 15:34:03 -0700 PDT 2016-04-07 15:34:03 -0700 PDT { 0} {/blog/ http://localhost:1315/blog/ } false 0xc0825878d0 {{0 0} 1} <nil>}

我知道例如.Site内部.但它甚至没有出现在渲染的HTML中.如何以更易理解的形式获取上下文,以便在不知道它应该具有的所有属性的情况下看到它是什么?

go go-templates

3
推荐指数
1
解决办法
746
查看次数

在模板中,我怎样才能有一个计数器?

我的项目需要基本的增量算法和循环,以保持模板可读并用值填充 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)
}
Run Code Online (Sandbox Code Playgroud)

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

{{ 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}}
Run Code Online (Sandbox Code Playgroud)

但是,我想使用我的数据将 input 元素的 value …

go go-templates

3
推荐指数
1
解决办法
6507
查看次数

如何从解析的模板中获取模板“动作”的地图或列表?

所以我想以某种方式将我{{ .blahblah }}在模板中定义的所有操作作为字符串切片。

例如,如果我有这个模板:

<h1>{{ .name }} {{ .age }}</h1>
Run Code Online (Sandbox Code Playgroud)

我希望能够得到[]string{"name", "age"}。假设模板具有方法func (t *Template) Fields() []string

t := template.New("cooltemplate").Parse(`<h1>{{ .name }} {{ .age }}</h1>`)
if t.Fields() == []string{"name", "age"} {
    fmt.Println("Yay, now I know what fields I can pass in!")
    // Now lets pass in the name field that we just discovered.
    _ = t.Execute(os.Stdout, map[string]string{"name": "Jack", "age":"120"})
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查这样的解析模板?
谢谢!

templates go go-templates

3
推荐指数
1
解决办法
2162
查看次数

Golang代码重复一次html代码n次

我正在研究golang web app.在那里我需要迭代HTML行n次数.

func index(w http.ResponseWriter, r *http.Request) {
    tmpl := template.Must(template.ParseFiles("templates/index.html"))
    n := 5
    tmpl.Execute(w, n)
}

<ul>
    <li><a href="/?page=1">1</a></li>
    <li><a href="/?page=2">2</a></li>
                    .
                    .
                    .
    <li><a href="/?page=n">n</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我该如何实现呢?

loops go go-templates

3
推荐指数
1
解决办法
2239
查看次数

如何将多个变量传递给 Go HTML 模板

我是 golang 新手。我想将多个变量传递给html。所以我有这样的类型:

type Variables struct { 
    UserNames    []string  
    Checks       []string
}
Run Code Online (Sandbox Code Playgroud)

传递了正确值的页面变量

var PageVars Variables
    PageVars = Variables{
        UserNames: ulist,
        Checks: check,
    }
    log.Println("ulist",ulist)
    err = tpl.Execute(w, PageVars) //execute the template and pass it to index page
    if err != nil { // if there is an error
        log.Print("template executing error: ", err) //log it on terminal
    }
Run Code Online (Sandbox Code Playgroud)

我想将用户名和检查传递给 html 模板,例如:

{{range .UserNames .Checks}}
{{.UserNames}}: <input type="checkbox" name="email" value={{. UserNames}} {{.Checks}}/><br />
{{end}}
Run Code Online (Sandbox Code Playgroud)

但没有成功。谁能纠正我的语法吗?多谢。

go go-templates

3
推荐指数
1
解决办法
4459
查看次数

加入带引号的、逗号分隔的字符串(给定包含这些字符串的结构列表)

使用 go 模板,我一直在尝试呈现带引号的逗号分隔字符串列表

例如 "string1", "string2", "string3"

我想要呈现的字符串来自一个结构体。请参阅Tags此示例中的:

package main

import (
    "fmt"
    "log"
    "os"
    "strings"
    "text/template"
)

const (
    templateString = `{{range .Tags}}"{{.Name}}", {{end}}`
)

var (
    funcs = template.FuncMap{
        "join":  strings.Join,
        "quote": func(in string) string { return fmt.Sprintf("\"%s\"", in) },
    }
    renderData = Task{
        Name:        "something to do",
        Description: "Do that thing",
        Tags: &[]Tag{
            Tag{Name: "tag1"},
            Tag{Name: "tag2"},
        },
    }
)

func main() {
    tmpl, err := template.New("master").Funcs(funcs).Parse(templateString)
    if err != nil {
        log.Fatal(err)
    }

    if …
Run Code Online (Sandbox Code Playgroud)

json go go-templates

3
推荐指数
1
解决办法
1536
查看次数

.Values 中的 helm 变量

我想动态生成我的模板文件,这是我的情况:

{{- $v := (.Files.Get "values-deployment-nginx.yaml") | fromYaml }}
spec:
  {{- range $key, $value := $v.containers }}
  containers:
  - name: {{ $value.name }}
    image: {{ .Values.{{ $value.name }}-image }}:{{ .Values.{{ $value.name }}--tag }}
Run Code Online (Sandbox Code Playgroud)

我想首先获得 {{ $value.name }},它可能是一个像“nginx”这样的字符串,然后我想使用 {{ .Values.nginx-image }} 在值文件中获取正确的图像值.
有没有办法做到这一点?非常感谢!


我有很多动态生成的部署模板,但只想将图像和标签公开到值文件,以便我们可以在安装图表时传递不同的图像信息。其他变量在 (.Files.Get "values-deployment-nginx.yaml") 中,像这样(也是动态生成的)。所以在生成模板时,我想匹配值文件中的图像和标签。

像这样的值文件:

deployment-nginx-imagerepo: nginx
deployment-nginx-imagetag: latest
Run Code Online (Sandbox Code Playgroud)

values-deployment-nginx.yaml 像这样(由其他项目生成):

autoscale: []
containers:
- envs: []
  imagerepository: nginx
  imagetag: latest
  itemid: n79fecd51_6716_fa65_5e64_aeed8ed6ab7e
  name: nginx
  resource:
    maxcpu: ""
    maxmemory: ""
    mincpu: "0.5"
    minmemory: 512m
  volumemounts: [] …
Run Code Online (Sandbox Code Playgroud)

go-templates kubernetes-helm

3
推荐指数
1
解决办法
1万
查看次数

如何在循环外使用模板变量?

在go模板中,我想获取循环中的最后一条消息,以在循环外使用:

    {{range $m := .messages}}      
            <div>Message subject: {{$m.Subject}}</div>

            {{$lastMsg := $m}}
    {{end}}


    <div>The last message's subject: {{$lasMsg.Subject}}</div> 
Run Code Online (Sandbox Code Playgroud)

但这不起作用,并且出现此错误:

 undefined variable "$lastMsg"
Run Code Online (Sandbox Code Playgroud)

我也尝试过,{{.lastMsg := $m}}但随后得到:

 unexpected ":=" in operand
Run Code Online (Sandbox Code Playgroud)

那么我该如何解决呢?

go go-templates

3
推荐指数
1
解决办法
77
查看次数

使用 helm 模板助手创建过滤列表

我正在尝试使用 helm 模板助手values.yaml根据每个列表成员中的一个键的值从我的文件中的列表中过滤掉值。

我的图表目前由这些文件组成 -
values.yaml -

namespaces:
- name: filter
  profiles:
  - nonProduction
- name: dont-filter
  profiles:
  - production  
clusterProfile: production
Run Code Online (Sandbox Code Playgroud)

模板/命名空间.yaml

apiVersion: v1
kind: List
items:
{{ $filteredList := include "filteredNamespaces" . }}
{{ range $filteredList }}
  {{ .name }}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

模板/_profile-match.tpl

{{/* vim: set filetype=mustache: */}}
{{- define "filteredNamespaces" -}}
  {{ $newList := list }}
  {{- range .Values.namespaces }}
    {{- if has $.Values.clusterProfile .profiles -}}
      {{ $newList := append $newList . }}
    {{- …
Run Code Online (Sandbox Code Playgroud)

go-templates kubernetes kubernetes-helm sprig-template-functions

3
推荐指数
2
解决办法
2618
查看次数