我想将两个数据对象传递给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的结构字段)
请告诉我如何传递这些数据以及如何在模板中访问它们.
eq与index我一起使用时,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/Gin 网络应用程序。我需要在 html 模板中放入一些动态内容。
例如,我有几个表(数字是动态的),其中有几行(数字是动态的)。我需要将它们放在 html 模板中。有没有办法在代码中组合模板?我更喜欢使用模板而不是在代码中构建表。
我检查了一个教程https://github.com/gin-gonic/gin但它没有在那里介绍。
我正在使用 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) 我创建了一个函数来检查是否定义了变量:
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 …
我正在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)
但是,这不起作用
我已经看到许多破折号用于 if 语句(“{{- if..”)的例子,例如:
{{- if hasKey .Values.mymap "mykey" }}
# do something conditional here...
{{- end }}
Run Code Online (Sandbox Code Playgroud)
该语句中破折号的目的是什么?
我试图将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条件?
我用的是"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) 我想创建一个舵图,其结果是如下所示的配置图:
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)
导致此错误消息: …