如何确保Django中只包含一次javascript文件

时间:2009-06-10 02:13:20

标签: django django-templates

我有一些包含jquery脚本的额外元素的子模板。有时他们一起使用。如何只加载一次jquery javascript文件?如果设置模板变量很方便,我可以在包含该行之前设置并检查一个。

5 个答案:

答案 0 :(得分:8)

我的建议:只需在您的<head>基础上添加jQuery,并将其称为一天。如果子模板是否使用jQuery,您将不必担心,并且在第一页加载时它只是一个19kb的下载而且就是这样。如果您使用Google的API云,它可能甚至不是任何用户可能从其他网站缓存的。

这可能不适合你,但我建议你尽可能考虑它。

答案 1 :(得分:5)

我解决这个问题的常用方法是将所有子模板包装在一个模板中,该模板负责我的包含(JS和CSS)。然后我确保我的缓存设置正确,这样每个用户只下载一次这些脚本。换句话说,我强制在第一个视图上下载所有外部脚本,然后依靠缓存每次都不重新下载JS。

将所有JS合并到一个文件中也会缩短下载时间,因为会减少要生成的请求。

另外需要注意的是,你提到把JS放在头脑中。虽然大多数人这样做,但将JS放在头部可能会使您的页面加载速度变慢。 JS文件不是并行下载的,因此它们会阻止所有其他下载。谷歌和雅虎建议将JS置于页面底部尽可能改善用户体验。

请参阅Yahoo YSlow工具和Google PageSpeed工具。

答案 2 :(得分:3)

我主要是咬紧牙关,并为每个模板加载jQuery。但如果你真的真的必须拥有这个功能,那么我建议使用自定义模板标签。 Check out the docs,特别是关于在上下文中设置变量的部分。

答案 3 :(得分:0)

您可以为脚本和基本模板中的其他额外项定义单独的块。 在基本模板中,将脚本的保留块留空。在需要扩展库的模板中填写带文件的链接。

答案 4 :(得分:0)

您可以将所有必需的文件作为上下文变量传递,然后编写一个模板标记,删除重复项并加载剩下的内容。

您也可以通过这种方式控制加载顺序。