मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि मेरी टेम्पलेट फ़ाइल में मेरी वैध तिथि है और यदि ऐसा है तो एक div पॉप्युलेट करें, अन्यथा इसे खाली छोड़ दें। डेटा प्रकार mysql.NullTime है।

मैं जो करने की कोशिश कर रहा हूं, यहां है:

{{ if .StartDate ne nil }}
   <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 }}

ऐसा लगता है कि काम करने के लिए, मैं एक गैर-शून्य तिथि के लिए कैसे परीक्षण कर सकता हूं?

0
mgrenier 13 जुलाई 2019, 05:14

1 उत्तर

सबसे बढ़िया उत्तर

यदि यह एक अनिवार्य मान है, तो आपको टेम्पलेट को प्रस्तुत करने से पहले इसे सत्यापित करना चाहिए।

हालांकि, यदि यह वैकल्पिक है और/या आप एक टेम्पलेट संचालित एप्लिकेशन लिख रहे हैं, तो आपके पास जो कुछ भी आप चाहते हैं उसे प्राप्त करने के लिए आपके पास कम से कम दो विकल्प हैं।

केवल शून्य मानों का उपयोग करना

अच्छे उपयोग के लिए शून्य मान रखें: time.Time के लिए जो कि युग है। तो, यह मानते हुए कि आपके पास अतीत में StartDate नहीं हो सकता है, आप गीलेर की तुलना कर सकते हैं कि आपका StartDate युग के बाद है।

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})
}

संपादित करें:

बेशक, आप दूसरे समाधान के लिए पाइप नोटेशन का भी उपयोग कर सकते हैं, जो कि अधिक पठनीय के लिए है, इम्हो: {{ if .StartDate | afterEpoch }}

खेल के मैदान पर दौड़ें

2
Markus W Mahlberg 13 जुलाई 2019, 17:28