我正在尝试找出以DRY方式在django项目中包含自定义javascript函数的最佳方法。
我开始在django模板底部的元素中包含javascript。这导致了多次重复和非常干燥的代码。
接下来,我在模板目录中放置了一个'js'文件夹,并根据需要在其中将library_name.js文件放入django模板中,进行了{%include%} -ed。
但是,由于我的某些django模板包括其他html模板(例如,我有一个专门用于模式的模板),因此有时会多次加载javascript库(当页面在呈现时填充了多个模式,或者在打开时填充了多个模式通过ajax调用)。
这被证明是有问题的,因为当我单击页面元素时,其中一些相同的javascript同时触发,因为该元素的ID符合其所有.click函数的条件。
避免重复加载javascript的最佳方法是什么?
我考虑的一个选项是让django模板引擎跟踪以前是否已加载库。这种方法将涉及让模板引擎在包含每个库时将以每个库命名的变量设置为true,并过滤掉该库的重新包含。但是,在django模板中定义变量与它们的原理背道而驰,只有通过使用一些自定义过滤器进行修改才能实现。
另一个选择是让javascript以前已经包含在DOM中,并根据需要排除它本身。在https://blog.michaelckennedy.net/2012/10/11/preventing-javascript-files-from-loading-multiple-times/上提到的方法似乎是合理的,但不是很整洁。
我想知道我们当中有经验的人可能会从我这里遇到的关于堆栈溢出的最佳实践建议中得到什么建议。