【发布时间】:2011-08-15 03:08:21
【问题描述】:
我有一个名为 filterspecs.py 的文件,其中包含 3 个内容:
tls = threading.local()- 继承自
django.contrib.admin.views.main.ChangeList的A类 - 继承自
django.contrib.admin.filterspecs.FilterSpec的B类
目标:我想将一个可用于A 实例的值list 传递给B 实例。由于 A 和 B 的生命周期由框架 (Django) 管理,因此我想不出私有方式在实例之间传递数据(使用 Queue 会有点过头了)。
尝试 #1 在使用 WSGI(守护程序)模式时失败。 在 A 类中,列表被添加到 threadlocal。
1. tls.list_display = ['foo', 'bar']
但在 B 类中,以下返回 False:
2. hasattr(tls, 'list_display')
为了比较起见,如果我通过 apache/mod_wsgi 运行它,它可以在 apache/mod_wsgi 之外运行
manage.py runserver
我查看了日志,发现不同的线程正在执行第 1 行和第 2 行。
我还有什么其他方法可以解决这个问题?
【问题讨论】:
-
我不明白这与线程有什么关系(在 Django 中很少使用线程,在管理中也没有使用线程)。请您能准确解释一下您要做什么 - 您在什么情况下使用这些类,为什么要在它们之间传递数据?
-
我根本没有在我的代码中使用线程。基本上每次创建新的
ChangeList时,它都会使用我的FilterSpec过滤查询集。 ChangeList 知道包含list_display的 ModelAdmin 并且我需要在我的 FilterSpec 中。如果有一种简单的 python 方式可以让我与 FilterSpec 共享该值?
标签: python django mod-wsgi wsgi