python - 在 django 中创建单例,或以任何其他方式创建全局的、按请求可用的对象

标签 python django django-context requestcontext

在开发“小部件”(使用一些自定义 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/

相关文章:

python - Twisted disownServiceParent 是否删除所有事件连接

Python 类成员表现得好像它是静态的?

python - Django:自定义主键的自动实例化?

python - Django Formset 缺少管理表单数据

django - 如何在Django中基于类的 View 中覆盖 `as_view`?

django 导航栏模板 - 标签

python - 从私有(private) Git 存储库进行 Pip 安装,在 Git URL 中使用个人访问 token

python - 将 Numpy 多维数组添加在一起

Django FormView 没有表单上下文

Django 'context' 用于基于函数和基于类的 View