2009-10-13 15 views
7

मुझे एक विजेट की आवश्यकता है, जो केवल एक ब्लॉक प्रदर्शित करना चाहिए, क्योंकि मैं jQuery के साथ कार्यक्षमता जोड़ूंगा। मैं जावास्क्रिप्ट और स्टाइलशीट को विजेट की "मीडिया" कक्षा में शामिल करने की कोशिश कर रहा हूं और यह मेरे लिए काम नहीं करता है।Django विजेट मीडिया काम नहीं करता

यहाँ कोड है:

class StarsWidget(Widget): 
    """ 
    Widget with stars for rating 
    """ 
    class Media: 
     js = (
       settings.MEDIA_URL + 'js/rating.js', 
      ) 

     css = { 
       'screen': (
        settings.MEDIA_URL + 'css/rating.css', 
        ) 
       } 


    def render(self, name, value, attrs=None): 
     if value is None: value = '' 

     attrs = {'id':'ratingX', 'class':'rating'} 
     final_attrs = self.build_attrs(attrs, name=name) 
     if value != '': 
      # Only add the 'value' attribute if a value is non-empty. 
      final_attrs['value'] = force_unicode(value) 
     return mark_safe(u'<div %s ></div>' % flatatt(final_attrs)) 

कोई सुझाव या मदद "वर्ग मीडिया" में

+0

जेनरेट (एक्स) एचटीएमएल देखें जहां आपका ब्राउज़र आपके जेएस/सीएसएस की तलाश में है। क्या आप इसकी अपेक्षा करते हैं? क्या आप उस स्थान पर लोड करते हैं यदि आप इसे सीधे लोड करने का प्रयास करते हैं? उत्तर के लिए –

उत्तर

3

पथ की सराहना की जाएगी स्वचालित रूप से settings.MEDIA_URL साथ prepended कर रहे हैं। तो इस तरह का प्रयास करें:

class Media: 
    js = ('js/rating.js',) 
    css = {'screen': ('css/rating.css',),} 

यह काम नहीं करेगा, तो मैं FireBug या यह की तरह कुछ उपयोग करने का सुझाव और पता चल सके कि ब्राउज़र सीएसएस और जावास्क्रिप्ट को लोड करने में सक्षम है।

टिप्पणी के आधार पर: ऐसा प्रतीत होता है कि आप अपना फॉर्म मीडिया लोड नहीं कर रहे हैं। टेम्पलेट में जोड़ने का प्रयास करें:

{{ my_form.media }} 
में

{% ब्लॉक सबहेडर%} (या जहाँ भी आप स्क्रिप्ट और सीएसएस लोड कर रहे हैं), जहां "my_form" आपके प्रपत्र उदाहरण, ध्यान में रखते हुए बनाया का नाम है।

+0

thx, लेकिन MEDIA_URL समस्या नहीं है। जब मैं इसे पायथन कंसोल में डीबग करता हूं तो मुझे सही आउटपुट वापस मिल जाता है, मेरा मतलब है >>> widget.media मुझे लगता है कि मुझे एक विशेष टेम्पलेटेटाग की आवश्यकता है जिसे फ़ॉर्म के सभी मीडिया को दोहराने के बिना लोड करना चाहिए। – Xidobix

28

क्या आप वास्तव में कहीं भी अपने टेम्पलेट में फॉर्म मीडिया शामिल कर रहे हैं?

{% block extrahead %} 
    {{ form.media }} 
{% endblock %} 
+1

यह दस्तावेज़ों में बहुत स्पष्ट नहीं था। यह स्वचालित प्रतीत होता है: "हर बार कैलेंडरविजेट का उपयोग किसी फॉर्म पर किया जाता है, उस फ़ॉर्म को सीएसएस फ़ाइल pretty.css, और जावास्क्रिप्ट फाइल animations.js और actions.js को शामिल करने के लिए निर्देशित किया जाएगा" https: //docs.djangoproject .com/en/1.11/विषयों/रूपों/मीडिया/# संपत्ति के रूप में एक स्थैतिक परिभाषा – ThePhi

0

माइनर अनुकूलन: आप अपने रास्तों को settings.MEDIA_URL पहले जोड़ें की जरूरत नहीं है, यह स्वतः ही जब यह पता मुद्रित है किया है।

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