【发布时间】:2017-08-22 12:05:48
【问题描述】:
在“App1”中,我在 models.py 中创建了“Class1”。效果很好。
在“App2”中,我在 myfile.py 中创建了“Class2”,它继承自“Class1”。效果很好。
在“App3”中,我在 myfile.py 中创建了“Class3”,它继承自“Class1”。
尽管 Class3 除了名称和位置之外都与 Class2 相同,但代码无法执行。我知道这一点是因为我在 App2.myfile.py 和 App3.myfile.py 中加入了打印语句,虽然 App2.myfile.py 有输出,但 App3.myfile.py 没有输出。
请注意,myfile.py 文件位于各自应用的根目录中。
试图找出问题的根源,创建了一个新项目,复制了 App1、App2 和 App3 并再次运行它。这一次,任何一个打印语句都没有输出,而且 - 非常令人惊讶 - 我的应用程序停止工作。
1) 为什么 myfile.py 执行失败?
2) 我是如何让 Project1.App2.myfile.py 首先执行的???
更新:
虽然隐含地准确地描述了代码。下面是 App2.Class2.myfile.py。代码被剥离以隔离问题,其他相关类的编写方式相同。
App2.myfile.py:
print 'before App2.Class2'
class Class2
pass
print 'after App2.Class2'
App2 是一个非常简单的项目:
未修改的 apps.py 文件
models.py 文件包含一个模型
三个定义类的python文件(其中一个是myfile.py)
空的init.py
我写的代码没有什么特别之处,所以我把它省略了。如果您知道特定代码会导致此类行为的原因,请告诉我。
开发服务器运行时,Project1.App2 输出“before App2.Class2”和“after App2.Class2”。复制到 Project2 时。 App2(相同的代码)不产生任何输出。
执行方式:
1) 运行 python manage.py runserver
2) 观察 Project1 中的输出:
'Performing system checks...
before App2.Class2
after App2.Class2
System check identified no issues'
注意没有'before App3.Class2 after App3.Class3'
3) 启动新的 Django 项目 (django-admin startproject Project2)
4) 将 App1、App2、App3 从 Project1 复制到 Project2
5) 运行(python manage.py runserver)
6) 在 Project2 中观察输出:
'Performing system checks...
System check identified no issues'
【问题讨论】:
-
你是如何执行文件的?你能显示你使用的命令吗?
-
没有办法回答这个问题。您还没有显示“类”本身的代码,或者更重要的是调用它们的内容。他们应该如何执行?
-
您确定执行目录在导入期间或代码中没有改变(您可以尝试清除每个相对路径并用绝对路径替换),因为 Django 习惯于使用绝对路径