【发布时间】:2020-04-15 16:37:18
【问题描述】:
我刚开始使用 django。
在this tutorial 之后,我最终得到了以下urls.py:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
这链接到polls.urls.py,它有自己的路由器。
我不喜欢的部分是字符串文字“polls.urls”,嗯……是字符串文字。
我想以某种方式使用 python 的某些功能直接引用该文件,并至少让我的 IDE 保护我。
如果我想移动那个polls.urls.py 文件,或者重命名它,或者重命名投票,会发生什么?我应该相信我的 IDE 能够从字符串文字中捕获引用吗?
这几乎就像在做this monstrosity,我很难接受这是最佳实践。
我觉得这很奇怪。
有没有办法在 django 的路由器中使用比字符串文字更不容易出错的东西?
【问题讨论】:
-
您多久重命名一个应用程序,或者将应用程序的 urlconf 文件重命名为“urls.py”以外的其他文件?在您重命名应用程序的极少数情况下,您忘记相应地更新主 urlconf 的可能性有多大 - 特别是因为您会收到导入错误?哦,是的:动态导入不是一个怪物,当你需要它时,它们是一个非常有用的功能。
-
@brunodesthuilliers 我举了这个例子,但我在 django 的其他地方也看到了这种情况。我认为在可以是静态的地方进行动态导入是不好的。也许它们不能是静态的,但我真的不明白为什么会这样。
-
当然你不应该在可以使用静态导入的地方使用动态导入,我们完全同意这一点。现在 Django 的初始化过程相当复杂(这是提供的所有功能的一部分),需要处理很多依赖项。在设置中(以及在主 urlconf 中)使用静态导入将使 Django 无法确保以正确的顺序导入所有内容。 Django 当然不是完美的,但它在全球范围内是一个设计和编写良好的软件,所以要确保这些选择有正当的理由。