gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:29:03 26 4
gpt4 key购买 nike

情况是这样的。我有一个带有两个已安装应用程序的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com