标签: go-templates

如何将多个数据传递给Go模板?

我想将两个数据对象传递给Go Template.一个是MongoDB查询结果,另一个是整数数组.

MongoDB查询: -

var results []User
sess, db := GetDatabase()
defer sess.Close()
c := db.C("user")
err := c.Find(nil).All(&results)
Run Code Online (Sandbox Code Playgroud)

我想通过以下代码发送'result'和一个int数组

GetTemplate("list").Execute(w,???????)
Run Code Online (Sandbox Code Playgroud)

如果只有db结果,我们可以使用它

GetTemplate("list").Execute(w,results)
Run Code Online (Sandbox Code Playgroud)

在模板中我们可以访问它{{.Name}}等(其中Name是[] User的结构字段)

请告诉我如何传递这些数据以及如何在模板中访问它们.

go go-templates

8
推荐指数
1
解决办法
5544
查看次数

使用eq和index转到模板

eqindex我一起使用时,Go模板有一些意想不到的结果.看到这段代码:

package main

import (
    "os"
    "text/template"
)

func main() {
    const myTemplate = `
{{range $n := .}}
    {{index $n 0}} {{if (index $n 0) eq (index $n 1)}}={{else}}!={{end}} {{index $n 1}}
{{end}}
`
    t := template.Must(template.New("").Parse(myTemplate))

    t.Execute(os.Stdout,
        [][2]int{
            [2]int{1, 2},
            [2]int{2, 2},
            [2]int{4, 2},
        })

}
Run Code Online (Sandbox Code Playgroud)

我希望有输出

1 != 2
2 = 2
4 != 2
Run Code Online (Sandbox Code Playgroud)

但我明白了

1 = 2
2 = 2
4 = 2
Run Code Online (Sandbox Code Playgroud)

我应该更改什么才能比较go模板中的数组成员?

go go-templates

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

如何在 Go Gin 中使用模板来获取动态内容

我有一个简单的 Go/Gin 网络应用程序。我需要在 html 模板中放入一些动态内容。

例如,我有几个表(数字是动态的),其中有几行(数字是动态的)。我需要将它们放在 html 模板中。有没有办法在代码中组合模板?我更喜欢使用模板而不是在代码中构建表。

我检查了一个教程https://github.com/gin-gonic/gin但它没有在那里介绍。

go go-templates go-gin

7
推荐指数
1
解决办法
7750
查看次数

如何缩进包含模板的内容

我正在使用 go 模板为 kubernetes 创建 yaml 定义。我正在尝试嵌套模板,但遇到了无法重用定义的问题,因为包含时缩进是错误的。即,在一种情况下,内容需要缩进,但在另一种情况下不需要。如何控制包含内容的缩进?

下面举例。我正在重用 pod.tmpl,在第一种情况下,它可以按原样包含在内。在第二种情况下,我需要缩进整个内容,使其成为服务成员

{{ if (eq .Case "pod")
  # NO indenting
  {{ template "pod" }}
{{ end }}

{{ if (eq .Case "service")
  service:
    # need to indent! so contents become members of service:
    {{ template "pod" }}
{{ end }}
Run Code Online (Sandbox Code Playgroud)

yaml go templating-engine go-templates

7
推荐指数
2
解决办法
7519
查看次数

Golang模板变量isset

我创建了一个函数来检查是否定义了变量:

fm["isset"] = func(a interface{}) bool {
        if a == nil || a == "" || a == 0 {
            fmt.Println("is not set")
            return false
        }
        fmt.Println("is set")
        return false
    }

tmpl :=  template.Must(template.New("").Funcs(fm).ParseFiles("templates/header.html"))

err := tmpl.ExecuteTemplate(w, "header", templateData)
Run Code Online (Sandbox Code Playgroud)

在模板中我有:

{{ if isset .Email }}
    email is set
{{ end }}
Run Code Online (Sandbox Code Playgroud)

如果变量包含在templateData(它是包含映射和字符串的自定义结构)中,则此函数有效,但如果变量不存在则会给出错误.

错误是:

executing "header" at <.Email>: can't evaluate field Email in type base.customData
Run Code Online (Sandbox Code Playgroud)

在我的情况下,"base.go"是处理程序,"customData"由以下内容定义:type customData struct{..}.

我希望能够重用模板,并且只有在从处理程序发送一些变量时才显示某些部分.任何想法如何isset在模板端实现变量检查?

我也试过使用:{{ if .Email}} do stuff …

struct if-statement go go-templates

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

在golang模板中实现for循环

我正在Golang中工作,现在我需要在一个select中打印至少20个选项,因此我需要使用某种从0到20的循环(以获取索引)。

如何在golang模板中使用for循环?

我需要在模板内部生成数字序列。我没有要迭代的数组。

编辑: 我需要得到这样的东西:

<select>
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
     <option value="4">4</option>
</select>
Run Code Online (Sandbox Code Playgroud)

因此,我需要在代码中执行以下操作:

<select>
     {{for i := 1; i < 5; i++}}
        <option value="{{i}}">{{i}}</option>
     {{end}}
</select>
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用

go-templates

7
推荐指数
2
解决办法
6026
查看次数

为什么在条件 Go 模板中使用破折号

我已经看到许多破折号用于 if 语句(“{{- if..”)的例子,例如:

{{- if hasKey .Values.mymap "mykey" }}
    # do something conditional here...
{{- end }}
Run Code Online (Sandbox Code Playgroud)

该语句中破折号的目的是什么?

go go-templates kubernetes-helm

7
推荐指数
1
解决办法
2508
查看次数

Helm 'if' 条件在一行中

我试图将if条件放在头盔模板的一行中:

- name: ENV_VARIABLE
  value: {{- if .Values.condition }}"Value1"{{- else }}"Value2"{{- end }}
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

错误:chart/templates/deployment.yaml 上的 YAML 解析错误:将 YAML 转换为 JSON 时出错:yaml:行 NN:找不到预期的“:”

所以我最终得到了多行条件:

- name: ENV_VARIABLE
{{- if .Values.condition }}
  value: "Value1"
{{- else }}
  value: "Value2"
{{- end }}
  
Run Code Online (Sandbox Code Playgroud)

工作正常,但非常不紧凑。

有没有办法在 helm 中使用单行if条件?

go-templates kubernetes-helm

7
推荐指数
1
解决办法
9657
查看次数

如何在Go模板中替换字符串?

我用的是"text/template"模块.

我有像这样的结构来解析Blogger中的XML

type Media struct {
    ThumbnailUrl string `xml:"url,attr"`
}


type Entry struct {
    ID string `xml:"id"`
    Published Date `xml:"published"`
    Updated Date `xml:"updated"`
    Draft Draft `xml:"control>draft"`
    Title string `xml:"title"`
    Content string `xml:"content"`
    Tags Tags `xml:"category"`
    Author Author `xml:"author"`
    Media Media `xml:"thumbnail"`
    Extra string
}
Run Code Online (Sandbox Code Playgroud)

然后我像这样创建Go Template

[image]
    src = "{{ replace .Media.ThumbnailUrl 's72-c' 's1600' }}"
    link = ""
    thumblink = "{{ .Media.ThumbnailUrl }}"
    alt = ""
    title = ""
    author = ""
    license = ""
    licenseLink = "" …
Run Code Online (Sandbox Code Playgroud)

go go-templates

6
推荐指数
1
解决办法
6356
查看次数

helm 图表:将 value.yaml 中的多行包含到 configmap 中

我想创建一个舵图,其结果是如下所示的配置图:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap
data:
  myconfigfile1.properties: |
    property11 = value11
    property12 = value12
  myconfigfile1.properties: |
    property21 = value21
    property22 = value22
Run Code Online (Sandbox Code Playgroud)

而这部分应可在以下位置进行配置values.yaml

myconfig:
  myconfigfile1.properties: |
    property11 = value11
    property12 = value12
  myconfigfile1.properties: |
    property21 = value21
    property22 = value22
Run Code Online (Sandbox Code Playgroud)

现在我想迭代 的所有子项myconfig并将values.yaml它们添加到我的头盔模板中。到目前为止我对此模板的尝试:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap
data: 
  # {{- range $key, $val := .Values.myconfig}}
  # {{ $key }}: |
  #   {{ $val }}
  # {{- end }}

Run Code Online (Sandbox Code Playgroud)

导致此错误消息: …

yaml go-templates kubernetes kubernetes-helm

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