2009-10-13 112 views
7

我需要一個小部件,它應該只顯示一個塊,因爲我會用jQuery添加功能。我試圖通過Widget的「媒體」類來包含JavaScript和樣式表,並且它對我不起作用。Django Widget Media不起作用

下面是代碼:

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

檢查生成的(X)HTML瀏覽器正在尋找您的JS/CSS的位置。它是你期望的地方嗎?如果您嘗試直接加載它,它會在該位置加載嗎? – 2009-10-13 08:26:59

回答

3

路徑會自動與settings.MEDIA_URL前綴。因此,嘗試這樣的:

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

如果它不會工作,我建議使用螢火蟲或類似的東西和檢查,如果瀏覽器是能夠加載CSS和JavaScript。

基於評論: 看來,你沒有加載你的表單媒體。嘗試添加模板:

{{ my_form.media }} 

{%塊子標題%}(或任何你加載腳本和CSS),其中「my_form」是你的表單實例,在視圖中創建的名稱。

+0

thx爲答案,但MEDIA_URL不是問題。當我在python控制檯調試時,我得到正確的輸出,我的意思是 >>> widget.media 我想我需要一個特殊的模板標籤,它應該加載所有形式的媒體,而不必重複它們。 – Xidobix 2009-10-13 07:18:05

28

您是否確實將表單媒體包含在您的模板中的任何位置?

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

這在文檔中並不十分清楚。它似乎是自動的:「每次在窗體上使用CalendarWidget時,該窗體將被定向爲包含CSS文件pretty.css,JavaScript文件animations.js和actions.js」https://docs.djangoproject .COM/EN/1.11 /主題/表格/媒體/#資產作爲一種靜態清晰度 – ThePhi 2017-08-30 12:37:55

0

小優化:您不需要將settings.MEDIA_URL預先添加到路徑中,打印時會自動完成。