【发布时间】:2015-08-03 18:58:57
【问题描述】:
假设我有两个模块:
first.package.module
# Assign module to a variable
which_module = ???
print("I originally live in {}".format(__name__)) # Prints first.package.module
print("I was run from {}".format(which_module))
second.package.module
from first.package.module import *
third.package.module
from first.package.module import *
如何在 second.package.module 中导入后打印第二行“I was run from”以打印 second.package.module?或者 third.package.module 从那里运行时。
我想要这种行为的原因是由于在 Django 中构建了一个在同一个项目中多次使用的应用程序,即同一个应用程序有多个实例。这些实例中的每一个都有自己的模型,这些模型继承自抽象模型。为了构建可重用的视图和 url,我想动态加载模型,为此,我需要知道哪个模块导入了应用程序并运行它。
【问题讨论】:
-
你为什么需要它?您要解决什么问题需要您查找帧堆栈以查看首先导入的内容?
-
@MartijnPieters:我试图在帖子末尾解释它。我有一个 Django 应用程序,我在同一个项目中多次使用它。应用程序的每个实例都有自己的模型。所以,要编写一个可重用的 url 和视图版本,我需要知道正在处理哪个实例,这样我才能动态加载相应的模型。
-
为什么在创建 url 和模型的时候不直接传入一个参数呢?或者使用 Django 配置变量?您的代码在导入时仅运行一次,因此如果您在同一个 Django 进程中执行此操作,您甚至无法执行您想要的操作。
-
我试过了,但想不出一个好的方法来解决它。我想可以用变量来包装所有东西(例如,urlpatterns),但我也失去了星型导入所有东西的简单性。
标签: python django python-3.x django-1.7