2013-06-26 6 views
7

जैसे दो HTML टेम्पलेट्स का उपयोग कर सकते हैं, मैं एम्बर.जेएस लाइब्रेरी के साथ जावास्क्रिप्ट में एक ऐप लिखने की कोशिश कर रहा हूं जो हैंडलबार्स टेम्पलेटिंग सिस्टम पर भारी निर्भर करता है। हालांकि, मैं फ्लैश का उपयोग कर रहा हूं जो जिन्जा टेम्पलेटिंग सिस्टम का भी उपयोग करता है।क्या आप हैंडलबार्स और जिनजा

क्या एक ही समय में दोनों टेम्पलेट प्रस्तुतकर्ताओं का उपयोग करना संभव है? या मुझे एक दूसरे का उपयोग करने की ज़रूरत है। फ्लास्क और ember.js दोनों का अनुभव करने वाले किसी भी व्यक्ति को पता है कि दूसरे के साथ प्रतिस्थापित करने के लिए कौन सा आसान हो सकता है? (हो सकता है कि हैंन्जाबार्स जिन्जा को इसके विपरीत या इसके विपरीत बदलना बहुत आसान हो)।

उत्तर

7

ध्यान दें कि ये दो टेम्पलेट इंजन विभिन्न स्थानों पर हैं। Jinja2 सर्वर की ओर चलाएगा, हैंडलबार्स क्लाइंट साइड पर चलेगा। यदि आपको आवश्यकता हो तो आप हस्तक्षेप के बिना संभावित रूप से दोनों का उपयोग कर सकते हैं।

लेकिन इसके साथ ही, सर्वर-साइड टेम्पलेट्स का उपयोग करने की वास्तव में कोई आवश्यकता नहीं है यदि आपके पास ember.js जैसे समृद्ध ग्राहक ढांचे हैं। आपकी स्थिति में फ्लास्क सर्वर के पास ऐसे मार्ग होंगे जो AJAX.js क्लाइंट को AJAX अनुरोधों के माध्यम से डेटा प्रदान करते हैं, इसलिए ग्राहक वास्तव में टेम्पलेट प्रतिपादन के लिए सबसे अच्छी जगह है।

+0

मैं सर्वर के लिए Node.js उपयोग कर रहा हूँ और हैंडल टेम्पलेट के साथ जेड का एक मिश्रण का उपयोग कर रहा हूँ। जेड अभी भी मुझे और सबसे महत्वपूर्ण रूप से मेरे डिजाइनर और एक अन्य गैर-तकनीकी व्यक्ति को संपादित करने के लिए एक बहुत ही आसान फ़ाइल देता है। (वे अभी भी कच्चे एचटीएमएल को संपादित कर सकते हैं, लेकिन जेड बस वास्तव में साफ है) जब मुझे हैंडलबार क्रियाएं और लिंक में डालना होता है, तो मैं बस टेम्पलेट के भीतर कच्चे HTML का उपयोग करता हूं। हमारे लिए अच्छी तरह से काम करता है। – WallMobile

+8

सर्वश्रेष्ठ वेब-ऐप्स (सबसे अधिक प्रदर्शनकर्ता) पहले लोड पर एक पूर्ण HTML पृष्ठ प्रस्तुत करते हैं और फिर इसे अद्यतन करने के लिए क्लाइंट-साइड प्रतिपादन का उपयोग करते हैं। प्रारंभिक पृष्ठ को पूरी तरह से बूटस्ट्रैप करने के लिए क्लाइंट पर निर्भर होने से पृष्ठ लोड में काफी वृद्धि होती है (बाद में AJAX कॉल किए जाने चाहिए)। –

+0

ध्यान दिया जाना चाहिए - हैंडलबार को किसी भी तरफ प्रस्तुत किया जा सकता है, लेकिन ग्राहक पक्ष पर जिन्जा दुर्लभ है। – cwallenpoole

2

जैसा कि @ मिगुएल ने कहा था, अगर आपको एम्बर.जेएस का उपयोग करने के लिए वास्तव में जिन्जा 2 की आवश्यकता नहीं है, तो मुझे पता चला है कि अगर आप उन टेम्पलेट्स को प्रस्तुत नहीं करना चाहते हैं, तो बस flask.send_file ('यहां अपनी एचटीएमएल फाइल') वापस लौटें इसके बजाए flask.render_template ('यहां आपकी एचटीएमएल फाइल') लौट रही है। अधिक जानकारी के लिए docs देखें।

+2

स्थिर फ़ाइलों के रूप में संभाली गई HTML फ़ाइलों को रखना बेहतर है। विकास के दौरान फ्लास्क सीधे "स्थैतिक" फ़ोल्डर से उनकी सेवा कर सकता है। उत्पादन के दौरान आपके वेब सर्वर को फ्लास्क को छोड़कर इन फ़ाइलों को सेवा देना चाहिए। आपको केवल AJAX अनुरोधों के लिए फ्लास्क का उपयोग करना चाहिए। आपकी परियोजना के लिए शुभकामनाएं! – Miguel

1

जबकि मैं मूल रूप से @ मिगुएल और @ एली दोनों के साथ सहमत हूं, कई कंपनियों ने सर्वर से जेनरेट किए गए HTML के साथ एपीआई के लिए रीस्टफुल मॉडल मिश्रण के साथ काम किया है। [नोट:। इस मामले में जब एंबर का उपयोग नहीं होना चाहिए, लेकिन मैं बोतल/Jinja2 और मेरे वर्तमान ग्राहक के कोड बेस में रीढ़ के साथ काम कर रहा हूँ]

मैं वास्तव में एक समाधान Pybars का उपयोग कर, कुछ के आधार पर पाया Khan Academy's style guide से पढ़ने:

@app.template_filter("handlebars") 
def handlebars_filter(context, filepath): 
    source = open(filepath, "r").read().decode('utf-8') 
    template = pybars.Compiler().compile(source) 

    return Markup(u"".join(template(context))) 
3

आप {% raw %} के रूप में कोड के वर्गों चिह्नित कर सकते हैं यह की अनदेखी करने के jinja2 बताने के लिए। इसलिए तरह लपेटें कच्चे टैग में अपने handlebars.js टेम्पलेट:

{% raw %} 
<script id="foo-template" type="text/x-handlebars-template"> 
    <p>{{foo}} - {{bar}}</p> 
</script> 
{% endraw %} 
संबंधित मुद्दे