2011-12-24 12 views
8

Estoy trabajando en un plugin de DjangoCMS, que incluye un archivo javascript por sí mismo. El Javascript del complemento se basa en las mismas bibliotecas que el resto del sitio. Por lo tanto, aquí está la parte conceptual de lo que tengo en este momento:Forma correcta de usar el addtoblock de Sekizai en un plugin de DjangoCMS

Basetemplate.html

{% load cms_tags sekizai_tags and_a_bunch_of_other_stuff %} 
<html> 
... 
<head> 
{% render_block "css" %} 
</head> 
<body> 
... 
{% addtoblock "js" %}[jquery]{% endaddtoblock %} 
{% addtoblock "js" %}[google api, data, more cool stuff like jqplot.]{%endaddtoblock%} 
{% addtoblock "js" %}[my site's library js.] {% endaddtoblock %} 

{% render_block "js" %} 
</body> 
</html> 

Ahora en la plantilla cargada para mis DjangoCMS encargo plugin,

great_calendar_plugin_template.html

{% load sekizai_tags and_a_couple_other_things %} 
{% addtoblock "js" %}[plugin javascript file dependency]{%endaddtoblock %} 
{% addtoblock "js" %}[plugin javascript file]{% endaddtoblock %} 
.... 

Así que no importa lo que haga el complemento javasc Los archivos ript se colocan en el HTML final sobre JQuery y todas las demás dependencias, en lugar de debajo de donde pertenecen. ¿Que me estoy perdiendo aqui?

Gracias.

Respuesta

5

Puede solucionar este problema colocando las llamadas "base" addtoblock (jquery, etc.) tan lejos como sea posible en la parte superior de su plantilla base. Lo importante es que es antes de llamar al y etiquetas {% placeholder %}, que en la mayoría de los sitios significa antes de su etiqueta de apertura <body>.

Un ejemplo de plantilla dummy:

{% load cms_tags sekizai_tags and_a_bunch_of_other_stuff %} 

{% addtoblock "js" %}[jquery]{% endaddtoblock %} 
{% addtoblock "js" %}[google api, data, more cool stuff like jqplot.]{%endaddtoblock%} 
{% addtoblock "js" %}[my site's library js.] {% endaddtoblock %} 

<html> 
    <head> 
     {% render_block "css" %} 
    </head> 
    <body> 
     {% placeholder "mycontent" %} 

     {% render_block "js" %} 
    </body> 
</html> 
+1

Grande. ¡Y gracias ojii por DjangoCMS! –

+0

No estoy seguro de si esto justifica otra publicación de pregunta, pero cuando el usuario administrador inicia sesión, los archivos adminmedia js se agregan al bloque 'js', por lo que jquery se redefine (lo cual quita jquery-ui y mis complementos jquery de mis libs). ¿Hay alguna manera de asegurar que el adminmedia en cambio se renderice en la parte superior del bloque? –

+0

Finalmente determiné que lo mejor para mí era volver a instalar django-cms con un pequeño ajuste en [toolbar.html] (https://github.com/divio/django-cms/blob/develop/cms/templates/ cms/toolbar/toolbar.html) file, para escribir condicionalmente en la etiqueta jQuery javascript script dependiendo de si $ fue definido. Leí que la barra de herramientas cms estaba en reurbanización, ¡espero que haya una actualización antes de lanzar esta cosa! –

Cuestiones relacionadas