1 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果它是強(qiáng)制值,您應(yīng)該在渲染模板之前對(duì)其進(jìn)行驗(yàn)證。
但是,如果它是可選的和/或您正在編寫(xiě)模板驅(qū)動(dòng)的應(yīng)用程序,那么您至少有兩個(gè)選項(xiàng)來(lái)實(shí)現(xiàn)您想要的。
僅使用零值
充分利用零值:因?yàn)?code>time.Time這就是epoch。因此,假設(shè)您不能擁有StartDate
過(guò)去的日期,您可以比較您的 StartDate 是否在紀(jì)元之后。
package main
import (
? ? "html/template"
? ? "os"
? ? "time"
)
// Note the call to the `After` function of the date.
const templateText = `
{{ if .Data.StartDate.After .Epoch }}
? ?<div class="box date-row" id="startdate-{{ .Data.DepartureTimeID }}">{{ .Data.StartDate.Format "2006-01-02" }}</div>
{{ else }}
? ?<div class="box date-row" id="startdate-{{ .Data.DepartureTimeID }}">No date</div>
{{ end }}
`
func main() {
? ? ?// shortcut for the sake of brevity.
? ? tmpl := template.Must(template.New("titleTest").Parse(templateText))
? ? // Create an anonymous wrapper struct for your data and the additional
? ? // time value you need to compare against
? ? tcx := struct {
? ? ? ? // This of course may be of the type you actually use.
? ? ? ? Data struct {
? ? ? ? ? ? StartDate? ? ? ?time.Time
? ? ? ? ? ? DepartureTimeID int
? ? ? ? }
? ? ? ? Epoch time.Time
? ? }{
? ? ? ? Data: struct {
? ? ? ? ? ? StartDate? ? ? ?time.Time
? ? ? ? ? ? DepartureTimeID int
? ? ? ? }{time.Now(), 1},
? ? ? ? Epoch: time.Time{},
? ? }
? ? tmpl.Execute(os.Stdout, tcx)
}
package main
import (
? ? "html/template"
? ? "os"
? ? "log"
? ? "time"
)
const templateText = `
{{ if afterEpoch .StartDate }}
? ?<div class="box date-row" id="startdate-{{ .DepartureTimeID }}">{{ .StartDate.Format "2006-01-02" }}</div>
{{ else }}
? ?<div class="box date-row" id="startdate-{{ .DepartureTimeID }}"></div>
{{ end }}
`
func AfterEpoch(t time.Time) bool {
? ? return t.After(time.Time{})
}
type yourData struct {
? ? DepartureTimeID int
? ? StartDate? ? ? ?time.Time
}
func main() {
? ? funcMap := template.FuncMap{
? ? ? ? "afterEpoch": AfterEpoch,
? ? }
? ? tmpl := template.Must(template.New("fmap").Funcs(funcMap).Parse(templateText))
? ? log.Println("First run")
? ? tmpl.Execute(os.Stdout, yourData{1, time.Now()})
? ? log.Println("Second run")
? ? tmpl.Execute(os.Stdout, yourData{DepartureTimeID:1})
}
編輯:
當(dāng)然,您也可以對(duì)第二種解決方案使用管道表示法,即 by ,以提高可讀性,恕我直言:{{ if .StartDate | afterEpoch }}
- 1 回答
- 0 關(guān)注
- 185 瀏覽
添加回答
舉報(bào)