2009-10-13 24 views
7

Ho bisogno di un widget, che dovrebbe solo visualizzare un blocco, perché aggiungerò funzionalità con jQuery. Sto cercando di includere il javascript e il foglio di stile attraverso la classe "Media" di Widget e non funziona per me.Django Widget Media non funziona

Ecco il codice:

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)) 

Eventuali suggerimenti o aiuto sarà apprezzato

+0

Controlla il codice HTML (X) generato per il browser in cui stai cercando JS/CSS. È dove ti aspetti? Si carica in quella posizione se si tenta di caricarlo direttamente? –

risposta

3

Percorsi in "classe media" sono automaticamente anteposto con settings.MEDIA_URL. In modo da provare in questo modo:

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

Se non funziona, io suggerisco di usare Firebug o qualcosa di simile e controllando se il browser è in grado di caricare CSS e JavaScript.

In base al commento: Sembra che non si stia caricando affatto il supporto magnetico. Prova ad aggiungere nel modello:

{{ my_form.media }} 

in {% block subheader%} (o dove si sta caricando script e CSS), dove "my_form" è il nome dell'istanza modulo, creato nella vista.

+0

thx per la risposta, ma MEDIA_URL non è il problema. Quando eseguo il debug nella console python ottengo l'output corretto, intendo >>> widget.media Penso di aver bisogno di un templatetag speciale che dovrebbe caricare tutti i media dei moduli senza ripeterli. – Xidobix

28

In realtà stai includendo il modulo multimediale nel modello in qualsiasi punto?

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

Non era molto chiaro nei documenti. Sembrava automatico: "Ogni volta che CalendarWidget viene utilizzato su un modulo, tale modulo verrà indirizzato per includere il file CSS pretty.css e i file JavaScript animations.js e actions.js" https: //docs.djangoproject .com/it/1.11/temi/forme/media/# risorse-as-a-statica definizione – ThePhi

0

Ottimizzazione secondaria: non è necessario anteporre le impostazioni.MEDIA_URL ai percorsi, viene eseguita automaticamente quando viene stampata.