在开发“窗口小部件”(对象-呈现-使用一些自定义javascript文件)时,我面临着创建“包含脚本管理器”类型的需要(避免在渲染多个控件时重复包含相同的JS文件)查看).
我的第一个想法是编写自定义模板呈现上下文,该上下文将在模板中提供EXTRA_SCRIPTS变量.但是我不知道在请求处理期间应该在哪里收集脚本列表?我认为那是我需要单例对象的地方.
有什么建议么?
解决方法:
如果使用单例,则会遇到线程安全问题.例如.您的应用程序在多个线程中运行,一个线程处理单个请求,因此您的全局对象应该是每个线程,但是单例在每个进程中都是唯一的.
您可以使用in this question这样的threading.local技术.它将为您提供每个线程和每个请求唯一的对象.
但是,不建议这样做,所以不要使用全局变量
对于小部件的情况,在Django中的小部件和表单中有Media设置. https://docs.djangoproject.com/en/1.3/topics/forms/media/
媒体对象也可以添加在一起.添加两个媒体对象后,生成的Media对象将包含两个文件中媒体的并集.
因此,您可以与媒体打架.
您也可以将媒体直接合并到模板中
{{ form.media|add:info_form.media|add:discount_form.media }}