python - 当我将 Django 应用程序添加到 INSTALLED_APPS 时会发生什么?

标签 python django

情况是这样的。我有一个带有两个已安装应用程序的 Django 项目。如果这两个应用程序彼此独立安装,它们似乎可以正常运行。

但是,如果我在 settings.INSTALLED_APPS 中列出这两个应用程序,则 reverse() 函数似乎会中断第一个应用程序中的 url。所以这让我相信第二个应用程序中的错误导致了问题。

如果我只是从 settings.INSTALLED_APPS 中删除 app_2,app_1 的 url reverse() 将再次开始工作。所以问题变成了当我将 app_2 添加到 settings.INSTALLED_APPS 时发生了什么“魔法”?我应该在 app_2 的什么地方查找导致此问题的代码?

更新:

我已经缩小了问题的范围,但它变得更奇怪了。 app_2 有一个定义了一些自定义管理 View 的 admin.py 文件。在该文件中有一行调用 reverse:
reverse('init_script_view', args=['id_content'])

只要该行在 admin.py 文件中,所有对 reverse() 的调用都会失败并出现 NoReverseMatch 异常。如果我删除该行,一切似乎都正常。

最佳答案

当您将应用程序添加到 INSTALLED_APPS 时不会发生什么特别的事情,但影响您的主要事情是在您调用 reverse() 时检查其 View 。

反向工作的方式是导入项目中的所有 View ,然后查看哪些与您提供的 URL 名称相匹配。但是,它非常脆弱,如果任何 View 由于某种原因导致错误,或者无法导入,reverse 调用将失败。

只有包含 app2 后它才会失败的事实表明 app2 中某处的 View 存在问题。尝试从 shell 中单独导入它们,看看会出现什么错误。

更新后编辑 感谢您提供额外的详细信息。我以前在我自己的代码中看到过这个。可能是因为在处理urlconf之前导入了admin文件,所以这个反向会报错。尝试将 admin.autodiscover() 行向下移动到 urls.py 的最底部,使其成为该文件的最后一行。

关于python - 当我将 Django 应用程序添加到 INSTALLED_APPS 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079898/

相关文章:

Django - 在 ModelForm 中单击 "submit"按钮时没有任何反应?

python - django:更改基于 ModelForm 的表单类的 auto_id

javascript - 在 Javascript 变量中加载 django 自定义标签

python - "No module named ' _sqlite3 '"运行 Django 's "python3 Manage.py migrate 时”

javascript - Views.py 未接收 POST 数据

python - 运行时错误 : module compiled against API version 0xa but this version of numpy is 0x9

python - python中函数内的函数

python - 如何将参数化 fixture 作为参数传递给另一个 fixture

用于管理 C++ 项目的 Python 脚本

javascript - 如何交互式地显示和隐藏 Bokeh 图中的线条?