2013-10-22 8 views
5

मैं इस तरह अस्पष्ट एक विजेट कुछ परिभाषित करना चाहते हैं:मैं jinja2 में पुन: प्रयोज्य विजेट कैसे बना सकता हूं?

{% block css %} 
.mywidget { 
    css: goes_here; 
{% endblock %} 

{% block widget %} 
<div class="mywidget"> 
    <!-- structure goes here --> 
</div> 
{% endblock %} 

{% block script %} 
$(".mywidget").addFunctionality(stuff) 
{% endblock %} 

दूसरे शब्दों में, क्या विजेट जरूरतों सीएसएस के एक मंदी, क्या इसकी सामग्री (अधिमानतः किसी तरह से parametrized) कर रहे हैं, और क्या स्क्रिप्ट ऐसा करना आवश्यक हो फ़ाइल के अंत में। फिर, मैं लेआउट टेम्पलेट का विस्तार करने में सक्षम होना चाहता हूं, शरीर में विगेट्स जोड़ सकता हूं (संभवतः किसी प्रकार के विभिन्न पैरामीटर के साथ एक ही प्रकार के एकाधिक विजेट), और सीएसएस और जावास्क्रिप्ट को ऊपर और नीचे ठीक से जोड़ा गया है प्रति विजेट प्रकार एक बार लेआउट टेम्पलेट।

यह एक सुंदर साफ और सीधा डिजाइन की तरह लगता है, और एक मूल यूआई डिजाइन परिप्रेक्ष्य से आ रहा है, मैं उलझन में हूं कि मुझे इस तरह कुछ करने के तरीके के बारे में कोई उदाहरण क्यों नहीं मिल रहा है।

उत्तर

8

आपने विजेट सिस्टम के लिए डिज़ाइन का हिस्सा निकाला है, लेकिन वास्तव में केवल दिखाया गया है कि आप विजेट को डिज़ाइन करने के बारे में कैसे जाएंगे। दूसरा हिस्सा यह है कि आप जिन्जा में विजेट का उपयोग कैसे करेंगे।

उदाहरण के लिए, आप विजेट को परिभाषित करने के लिए Jinja Macros का उपयोग कर सकते हैं। एक फ़ाइल "mywidget.html" और उपयोग ...

{% macro css() -%} 
    .mywidget { 
     css: goes_here; 
    } 
{% endmacro %} 

{% macro widget() -%} 
    <div class="mywidget"> 
     <!-- structure goes here --> 
    </div> 
{% endmacro %} 

{% macro script() -%} 
    $(".mywidget").addFunctionality(stuff) 
{% endmacro %} 

बनाएं फिर, अपने HTML में इस विजेट का उपयोग, तुम कर सकते हो ...

{% import 'mywidget.html' as mywidget %} 

... 
<html> 
<head> 
    <style> 
     {{ mywidget.css() }} 
    </style> 
<head> 
<body> 
    {{ mywidget.body() }} 

    <script> 
     {{ mywidget.script() }} 
    </script> 
</body> 
</html> 
बेशक

, समस्या है कि यहाँ है आपको सभी विजेटों को मैन्युअल रूप से विभिन्न क्षेत्रों में रखना होगा। एक बार जब आप बड़ी संख्या में विजेट प्राप्त कर लेते हैं, तो उन्हें ट्रैक रखना मुश्किल हो सकता है, और उदाहरण के लिए, mywidget.script() कोड कई बार बनाया गया है, जो डुप्लिकेट ईवेंट आग का कारण बनता है।

और, निश्चित रूप से, आप हमेशा अंतिम समाधान प्रदान करने वाले संदर्भ के हिस्से के रूप में पाइथन ऑब्जेक्ट्स रख सकते हैं। ध्यान देने योग्य महत्वपूर्ण बात यह है कि जिनजा सिर्फ टेम्पलेट्स से पाठ प्रस्तुत करता है। टेम्पलेट्स को HTML टेम्पलेट भी नहीं होना चाहिए, आप एक सादा पाठ ई-मेल प्रस्तुत करने के लिए जिन्जा का उपयोग कर सकते हैं। इसलिए, इस तरह के "विजेट" सिस्टम को बनाने की कोशिश कर रहे लाइब्रेरी के लेखकों की कल्पना करना मुश्किल होगा और परिणामस्वरूप सभी को खुश होने की उम्मीद है। लाइब्रेरी की जटिलता को इतनी जटिल सुविधा के साथ क्यों बढ़ाएं कि उन्हें समर्थन करने की आवश्यकता होगी (विशेष रूप से जब जिन्जा पहले से ही इस तरह के ढांचे को बनाने के लिए उपकरण प्रदान करता है)?

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