在开发“小部件”(使用一些自定义 javascript 文件呈现的对象)时,我面临着创建一种“包含脚本管理器”的需要(以避免在多个 JS 文件中重复包含同一 JS 文件为 View 呈现小部件)。
我的第一个想法是编写自定义模板呈现上下文,它将在模板中提供 EXTRA_SCRIPTS 变量。但是我不知道在请求处理期间应该在哪里收集脚本列表?我认为那是我需要单例对象的地方。
有什么建议吗?
最佳答案
如果你使用单例,你会遇到线程安全问题。例如。您的应用程序在多个线程中运行,一个线程处理单个请求,因此您的全局对象应该是每个线程,但单例是每个进程唯一的。
您可以像 in this question 中描述的那样使用 threading.local
技术.它将为您提供每个线程和每个请求唯一的对象。
但是不推荐,所以不要使用全局变量
对于您使用小部件的情况,Django 中的小部件和表单中有媒体设置。 https://docs.djangoproject.com/en/1.3/topics/forms/media/
媒体对象也可以加在一起。添加两个媒体对象时,生成的媒体对象包含来自两个文件的媒体的并集。
这样您就可以与媒体抗争。 您也可以将媒体直接组合到模板中
{{ form.media|add:info_form.media|add:discount_form.media }}
关于python - 在 django 中创建单例,或以任何其他方式创建全局的、按请求可用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533885/