3

在开发“小部件”(对象,它 - 渲染 - 使用一些自定义 javascript 文件)时,我需要创建一种“包含脚本管理器”(以避免在渲染多个小部件时重复包含相同的 JS 文件视图)。

我的第一个想法是编写自定义模板渲染上下文,它将在模板中提供 EXTRA_SCRIPTS 变量。但是我不知道在请求处理期间我应该在哪里收集脚本列表?我认为这就是我需要单例对象的地方。

有什么建议么?

4

1 回答 1

3

如果你使用单例,你会遇到线程安全问题。例如,您的应用程序在多个线程中运行,一个线程处理单个请求,因此您的全局对象应该是每个线程,但单例是每个进程唯一的。您可以使用此问题threading.local中描述的技术。它将为您提供每个线程和每个请求都是唯一的对象。

但是不推荐,所以不要使用全局变量

对于您使用小部件的情况,Django 中的小部件和表单中有媒体设置。https://docs.djangoproject.com/en/1.3/topics/forms/media/

媒体对象也可以添加在一起。添加两个媒体对象时,生成的媒体对象包含来自两个文件的媒体的联合。

所以你可以用媒体来对抗重复。您也可以将媒体直接组合到模板中

{{ form.media|add:info_form.media|add:discount_form.media }}
于 2012-01-03T13:33:34.000 回答