【问题标题】:Python code failing to execute in Django appPython 代码无法在 Django 应用程序中执行
【发布时间】: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 习惯于使用绝对路径

标签: python django


【解决方案1】:

提示:在 App2 或 App3 不依赖的任何应用程序中引用 myfile.py 中的定义,以防止循环引用。在models.py中:

from App2.myfile import Class2
from App3.myfile import Class3

这将强制 Django 识别您的代码。

Protip:不要再因为 Stack Overflow 的集体无能而浪费时间了。你会花更多的时间遵守他们荒谬的问题协议,而不是解决自己的问题。只需查看对原始问题的答复...

这将是我对你们“社区”的最后一次贡献。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2014-10-20
    • 2011-11-26
    • 2021-08-25
    • 2013-03-05
    相关资源
    最近更新 更多