2009-10-13 2 views
7

J'ai besoin d'un widget, qui ne devrait afficher qu'un bloc, car je vais ajouter des fonctionnalités avec jQuery. J'essaie d'inclure le javascript et la feuille de style à travers la catégorie "Media" de Widget et cela ne fonctionne pas pour moi.Django Widget Media ne fonctionne pas

Voici le code:

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

Toute suggestion ou aide sera appréciée

+0

Vérifiez le code HTML généré pour savoir où votre navigateur recherche votre JS/CSS. Est-ce là où vous vous attendez? Est-ce qu'il charge à cet endroit si vous essayez de le charger directement? –

Répondre

3

chemins dans "la classe des médias" sont automatiquement préfixé avec settings.MEDIA_URL. Essayez donc comme ceci:

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

Si cela ne fonctionne pas, je suggère d'utiliser Firebug ou quelque chose comme ça et vérifier si le navigateur est capable de charger CSS et Javascript.

Basé sur le commentaire: Il semble que vous ne chargiez pas votre support de formulaire. Essayez d'ajouter dans le modèle:

{{ my_form.media }} 

dans {% block%} subheader (ou chaque fois que vous chargez des scripts et css), où « my_form » est le nom de votre instance de formulaire, créé dans la vue.

+0

thx pour la réponse, mais le MEDIA_URL n'est pas le problème. Quand je débogue dans la console Python, je reçois la sortie correcte, je veux dire >>> widget.media Je pense que j'ai besoin d'un modèle spécial qui devrait charger tous les médias des formulaires sans les répéter. – Xidobix

28

Est-ce que vous incluez réellement le support de formulaire dans votre modèle n'importe où?

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

Ce n'était pas très clair dans les docs. Il semblait être automatique: "Chaque fois que le CalendarWidget est utilisé sur un formulaire, ce formulaire sera dirigé pour inclure le fichier CSS pretty.css, et les fichiers JavaScript animations.js et actions.js" https: //docs.djangoproject .com/fr/1.11/rubriques/formulaires/media/# assets-as-a-static-definition – ThePhi

0

Optimisation mineure: Vous n'avez pas besoin de rajouter settings.MEDIA_URL à vos chemins, c'est fait automatiquement quand il est imprimé.