2012-03-05 15 views
46

लोग अपने गो-आधारित ऐपइंजिन अनुप्रयोगों में टेम्पलेट्स के उपयोग को कैसे प्रबंधित कर रहे हैं?जाओ, ऐपइंजिन: आवेदन के लिए टेम्पलेट्स को कैसे व्यवस्थित करें

विशेष रूप से, मैं एक परियोजना संरचना है कि मिलता तलाश कर रहा हूँ निम्नलिखित:

  • श्रेणीबद्ध (निर्देशिका) टेम्पलेट्स और आंशिक टेम्पलेट्स की संरचना
  • मुझे एचटीएमएल उपकरणों का उपयोग करने की अनुमति दें/मेरे टेम्पलेट पर संपादकों (xxx.go फ़ाइलों में एम्बेड खाका भी जब देव सर्वर पर टेम्पलेट पाठ के इस मुश्किल)
  • स्वचालित पुनः लोड करता है

संभावित ब्लॉकों हैं:

  • टेम्पलेट। ParseGlob() पुनरावर्ती रूप से विपरीत नहीं होगा।
  • प्रदर्शन कारणों से यह सिफारिश की गई है कि कच्चे टेक्स्ट फ़ाइलों के रूप में अपने टेम्पलेट्स को अपलोड न करें (क्योंकि वे टेक्स्ट फाइल कोड निष्पादित करने से अलग सर्वर पर रहते हैं)।

कृपया ध्यान दें कि मैं टेम्पलेट पैकेज के उपयोग के एक ट्यूटोरियल/उदाहरण की तलाश नहीं कर रहा हूं। यह एक ऐप संरचना सवाल है। ऐसा कहा जा रहा है कि, यदि आपके पास कोड है जो उपर्युक्त समस्याओं को हल करता है, तो मुझे इसे देखना अच्छा लगेगा। अग्रिम में धन्यवाद।

उत्तर

68

गो की मेरी पसंदीदा विशेषताओं में से एक पैकेज के अंदर आसानी से हैंडलर जोड़ने की क्षमता है। यह मॉड्यूलर कोड लिखने की प्रक्रिया को बहुत सरल बनाता है।

उदाहरण के लिए:

फ़ाइल संरचना

|-- app.yaml 
|-- app 
| +-- http.go 
|-- templates 
| +-- base.html 
+-- github.com 
    +-- storeski 
     +-- appengine 
      |-- products 
      | |-- http.go 
      | +-- templates 
      |  |-- list.html 
      |  +-- detail.html 
      +-- account 
       |-- http.go 
       +-- templates 
        |-- overview.html 
        +-- notifications.html 

प्रत्येक संकुल एक http.go फ़ाइल है कि एक url उपसर्ग के स्वामित्व लेता है।उदाहरण के लिए पैकेज github.com/storeski/appengine/products के तहत /products से शुरू होने वाले किसी भी इनबाउंड यूआरएल का मालिक होगा।

इस मॉड्यूलर दृष्टिकोण के साथ products पैकेज के भीतर टेम्पलेट्स को स्टोर करना फायदेमंद है। यदि आप साइट के लिए एक सतत आधार टेम्पलेट को बनाए रखना चाहते हैं तो आप एक सम्मेलन स्थापित कर सकते हैं जहां आप templates/base.html का विस्तार करते हैं।

उदाहरण

टेम्पलेट्स/base.html

<!DOCTYPE HTML> 
<html> 
    <head> 
    <title>{{.Store.Title}}</title> 
    </head> 

    <body> 
    <div id="content"> 
     {{template "content" .}} 
    </div> 
    </body> 
</html> 

github.com/storeski/appengine/products/templates/list.html

{{define "content"}} 
    <h1> Products List </h1> 
{{end}} 

github.com/storeski/appengine/pro नलिकाओं/http.go

func init() { 
    http.HandleFunc("/products", listHandler) 
} 

var listTmpl = template.Must(template.ParseFiles("templates/base.html", 
    "github.com/storeski/appengine/products/templates/list.html")) 

func listHandler(w http.ResponseWriter, r *http.Request) { 

    tc := make(map[string]interface{}) 
    tc["Store"] = Store 
    tc["Products"] = Products 

    if err := listTmpl.Execute(w, tc); err != nil { 
    http.Error(w, err.Error(), http.StatusInternalServerError) 
    } 
} 

क्योंकि इसमें ऐप्स/पैकेज तुच्छ के आदान-प्रदान करता है यह दृष्टिकोण बहुत ही रोमांचक है। अगर मैं एक पैकेज लिखता हूं जो प्रमाणीकरण को संभालता है जो /auth यूआरएल का स्वामित्व लेता है। कोई भी डेवलपर, जो, पैकेज को उनके उत्पाद रूट में जोड़ता है, तुरंत सभी कार्यक्षमता है। उन्हें बस एक बेस टेम्पलेट (templates/base.html) बनाना है और अपने उपयोगकर्ताओं को /auth पर निर्देशित करना है।

+1

अच्छा लेआउट, केली। सामग्री टेम्पलेट सहित, आपको शायद डॉट (।) जोड़ना चाहिए, उदा। '{{टेम्पलेट" सामग्री "।}}'। अन्यथा, आपका टीसी उत्पादों/टेम्पलेट्स/list.html – alex

+0

में उपलब्ध नहीं होगा धन्यवाद @alex - मैंने आपके सुझाव को शामिल करने के लिए उत्तर संपादित किया है। –

+0

बहुत अच्छा, केली। आप इस लेआउट का उपयोग कर मॉडल को संभालने का सुझाव कैसे देते हैं? मेरा मतलब http.go के अंदर के प्रकारों को घोषित करना या शायद model.go फ़ाइल बनाना है? अग्रिम में धन्यवाद। –

0

पहले से क्षमा करें क्योंकि यह पोस्ट वह नहीं है जिसे आप वास्तव में खोज रहे हैं और आप पहले से ही सुना होगा कि मैं दस लाख बार कहने वाला हूं। यह किसी भी पोस्ट की तुलना में बेहतर नहीं है, इसलिए यहां यह जाता है:

गो 1 जल्द ही रिलीज़ हो जाएगा (एक या दो सप्ताह में)। मैं सकारात्मक हूं कि ऐप इंजन अपेक्षाकृत जल्द ही आर 60 से अधिक 1 का समर्थन करने के लिए स्विच कर रहा है। टेम्पलेट कोरलिब्स (अन्य libs के बीच) उस समय एक सभ्य राशि के साथ खेला गया है, इसलिए भाषा के माध्यम से होने वाले कई बदलावों के कारण स्वयं को प्रासंगिक चीजों को करने का लोकप्रिय तरीका खोजने के लिए यह एक गड़बड़ है।

कहा जा रहा है कि मैंने देखा है कि मैंने कुछ अलग-अलग तरीकों से निपटने वाले बहुत से लोगों को देखा है, लेकिन उनमें से बहुत कम एपइंजिन विशिष्ट थे क्योंकि गो में किए जा रहे अधिकांश कामों को भाषा के साथ अद्यतित रखा जाता है (जो लंबे समय से आर 60 के साथ संगत रहा है)। यदि आप कुछ कोड देखना चाहते हैं जो लोग समान परियोजनाओं के लिए उपयोग कर रहे हैं, तो आपको आईआरसी पर आना चाहिए और पूछना चाहिए। टेम्पलेट्स एक लोकप्रिय विषय हैं और मैंने केवल उनके साथ मूलभूत कार्यक्षमता का उपयोग किया है - मैंने सेट को कभी छुआ नहीं है। आईआरसी बहुत दोस्ताना है और आप वहां बहुत कुछ सीख सकते हैं। यह निश्चित रूप से भाषा के लिए दस्तावेज़ों के अलावा सबसे अच्छा संसाधन है। यदि आपको पहले से ही पता नहीं है कि आईआरसी चैनल फ्री नोड पर # गो-नट्स है।

ऐप इंजन पर पढ़ने और अच्छी किस्मत विकसित करने के लिए धन्यवाद। मुझे आशा है कि 1 जाने के अपडेट तेजी से जाएं।

+0

धन्यवाद। Go1 के आधार पर एक एसडीके के लिए बीटा पहले से ही बाहर है: https://groups.google.com/forum/?fromgroups#!topic/google-appengine-go/IlF2b1K-rXY नए टेम्पलेट्स पैकेज कुछ के लिए अपेक्षाकृत स्थिर हैं महीनों, इसलिए मैं उम्मीद कर रहा था कि इन मुद्दों के बारे में कुछ सोच पूरी की गई है। मैं एपइंजिन के लिए विशिष्ट उत्तरों के लिए भी खुश रहूंगा। – laslowh

+0

लेकिन मैं आपकी सलाह लेगा और आईआरसी से पूछूंगा। मैं वापस रिपोर्ट करूंगा। – laslowh

+0

आईआरसी बहुत उपयोगी नहीं था, लेकिन मेलिंग सूची पर यह चर्चा है: https://groups.google.com/forum/?fromgroups#!topic/google-appengine-go/43-nFI9ryU4 – laslowh

संबंधित मुद्दे