2011-12-24 50 views
8

我正在研究DjangoCMS插件,其中包含一个JavaScript文件。插件的Javascript依赖于网站其他部分所用的相同库。所以,这里是什么,我现在所拥有的概念部分:在DjangoCMS插件中使用Sekizai addtoblock的正确方法

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> 

现在,在加载我DjangoCMS自定义插件模板,

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 %} 
.... 

所以不管我做什么插件javasc ript文件被放置在JQuery之上的最终HTML和所有其他依赖项中,而不是放在它们所属的位置之下。我在这里错过了什么?

谢谢。

回答

5

您可以通过将“基本”addtoblock调用(jQuery等)尽可能放在基本模板的顶部来解决此问题。重要的是,它是之前你打电话和{% placeholder %}标签,其中大多数网站上意味着之前,你的开放<body>标签。

一个例子虚拟模板:

{% 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

大。并感谢你为DjangoCMS提供的! – 2011-12-26 17:49:23

+0

我不确定这是否保证另一个问题发布,但当管理员用户登录时,adminmedia js文件被添加到'js'块,所以jquery得到重新定义(这吹走了jquery-ui和我的jquery插件从我的库中)。有什么方法可以确保将adminmedia渲染到块的顶部? – 2011-12-26 17:53:44

+0

我终于确定,对我来说最好的事情是在[toolbar.html](https://github.com/divio/django-cms/blob/develop/cms/templates/)中稍微调整django-cms重新安装cms/toolbar/toolbar.html)文件,根据是否定义$来有条件地写入jQuery javascript脚本标记。我看到cms工具栏正在重建中,我希望在启动这个东西之前进行升级! – 2011-12-26 23:02:38

相关问题