2009-10-13 8 views
7

Necesito un widget, que solo debe mostrar un bloque, porque voy a agregar funcionalidad con jQuery. Estoy tratando de incluir la javascript y la hoja de estilo a través de la clase de Widget "Media" y no funciona para mí.Django Widget Media no funciona

Aquí está el código:

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

Cualquier sugerencia o ayuda será apreciado

+0

Compruebe el HTML generado (X) para el lugar donde su buscador está buscando su JS/CSS. ¿Es donde esperas? ¿Se carga en esa ubicación si intentas cargarlo directamente? –

Respuesta

3

Caminos en "Medios de clase" se antepone automáticamente con settings.MEDIA_URL. Así que trate de esta manera:

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

Si no va a funcionar, se sugiere emplear FireBug o algo parecido y comprobar si el navegador es capaz de cargar CSS y JavaScript.

En base a un comentario: Parece ser, que no va a cargar el formulario de medios en absoluto. Trate de añadir en la plantilla:

{{ my_form.media }} 

en {% block%} subtítulo (o donde sea que vaya a cargar scripts y CSS), donde "my_form" es el nombre de la instancia de formulario, creado en la vista.

+0

thx para la respuesta, pero el MEDIA_URL no es el problema. Cuando lo depuro en la consola de Python obtengo la salida correcta, me refiero a >>> widget.media Creo que necesito una plantilla especial que cargue todos los medios de los formularios sin repetirlos. – Xidobix

28

¿Está realmente incluyendo los medios de formulario en su plantilla en cualquier lugar?

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

No estaba muy claro en los documentos. Parecía ser automático: "Cada vez que se utiliza el CalendarWidget en un formulario, ese formulario se dirigirá para incluir el archivo CSS pretty.css y los archivos JavaScript animations.js y actions.js" https: //docs.djangoproject .com/es/1.11/topics/forms/media/# assets-as-a-static-definition – ThePhi

0

optimización Menor: No es necesario anteponer settings.MEDIA_URL a sus caminos, se hace de forma automática cuando se imprime.

Cuestiones relacionadas