2013-01-06 48 views
9

GAE GO में HTML टेम्पलेट में सशर्त कथन निष्पादित करना कैसे संभव है? मैं यह पूरा करने के लिए एक विकल्प का चयन एक html टैग में चयनित करने के लिए कोशिश कर रहा था:GAE में सशर्त बयान गो टेम्पलेट पैकेज

<select name=".Grade"> 
      <option value=""></option> 
      <option value="1" {{ if .Grade="1" }} selected="selected" {{ end }}>Grade One</option> 
      <option value="2" {{ if .Grade="2" }} selected="selected" {{ end }}>Grade Two</option> 
      <option value="3" {{ if .Grade="3" }} selected="selected" {{ end }}>Grade Three</option> 
      <option value="4" {{ if .Grade="4" }} selected="selected" {{ end }}>Grade Four</option> 
      <option value="5" {{ if .Grade="5" }} selected="selected" {{ end }}>Grade Five</option> 
      <option value="6" {{ if .Grade="6" }} selected="selected" {{ end }}>Grade Six</option> 
</select> 

है

{{ if .Grade }} selected="selected" {{ end }} 
संदर्भ दस्तावेज़ में

लेकिन यह केवल सही का आकलन करता है, तो .Grade मूल्य है। किसी भी मदद को बहुत सराहा जाएगा। धन्यवाद!

उत्तर

15

आधार टेम्पलेट पैकेज में कोई समानता बयान नहीं है।
यहां इसके बारे में interesting discussion from golang-nuts है।

आप कई संभावनाएं हैं: एक रस कॉक्स की तरह golang-पागल सूत्र में पता चलता है

  • , समानता के लिए एक बाहरी समारोह को परिभाषित करने और एक if हालत
  • उपयोग कुछ आधार टेम्पलेट पैकेज के साथ परीक्षण समझ सकते हैं (नीचे मेरा कोड देखें)
  • टेम्पलेट से कुछ तर्क हटाएं: 6 हार्डकोडेड फ़ील्ड होने के बजाय, आप selected बूलियन फ़ील्ड के साथ डेटाटाइप बना सकते हैं और range के साथ इन ऑब्जेक्ट्स में से 6 का एक सरणी दे सकते हैं बयान

मैं बूलियन्स का एक टुकड़ा का उपयोग करके अपने उदाहरण निर्मित:

func main() { 
    temp,err := template.ParseFiles("template.html") 
    if err != nil { 
     panic(err) 
    } 

    g := make([]bool, 7) 
    g[1] = true 
    temp.Execute(os.Stdout, &g) 
} 

टेम्पलेट में एक पंक्ति इस तरह दिखता है:

<option value="3"{{ if index . 3 }} selected="selected"{{ end }}>Grade Three</option> 

यह मेरे लिए बहुत अच्छा नहीं लगता है। लेकिन मैं कहूंगा कि सभी समाधानों में उनकी कमी है और यह स्वाद का मामला है (तीसरा समाधान क्लीनर होना चाहिए लेकिन इस तरह की साधारण चीज़ के लिए ओवरकिल माना जा सकता है)।

संपादित करें (2013/12/11)

Go 1.2 (released on 2013/12/01) में, template engine अद्यतन किया गया है और तुलना सहित नई ऑपरेटरों, भी शामिल है। अब यह उम्मीद के अनुसार काम करना चाहिए:

{{if eq .Grade 1 }} selected="selected" {{end}} 

आप अभी भी अपने टेम्पलेट्स में जितना संभव हो उतना तर्क रखना चुन सकते हैं।

+1

गो 1.2 जारी – ithkuil