urls.py 中是否为 Django 2 推荐了已定义的 app_name?

Is a defined app_name recommended in urls.py for Django 2?

我想弄清楚在我的 Django 应用程序中编写 urls.py 文件的最佳做法是什么。我正在将一个旧项目更新到 Django 2,我在更新文档中读到 urls.py 文件应该正确命名空间。一些谷歌搜索建议我总是在我的 urls.py 中定义 app_name,这样你就不必手动将 app_name 添加到每个 url 端点。相反,您可以像 ("app_name:url_name").

一样访问它

在我的项目中我有:

avatar/urls.py
services/urls.py

所以在这种情况下,我不确定如何命名它们,但现在我在 avatar/urls.py 中使用 app_name = "avatar" 并且在 services/urls.py 中使用 app_name = "avatar-services" .

这两个都需要 app_name 才能正确命名空间吗?始终为每个 urls.py 定义一个 app_name 是最佳做法吗?我仍然不确定这是必需的还是推荐的。如果我没理解错的话,它只是为了 easier/logical 访问 url,不是严格要求的,但建议这样做更容易理解。

编辑:更新以使示例更加清晰。

对我来说,最好的方法是将 urlpatterns 转换为元组,将 appname 作为第二个元素传递

urlpatterns = ([
    path(..., name='some name'),
    path(...., name='some name'),
    .....
], 'appname')

拥有多个 urls.py 文件不是强制性的,但建议每个应用程序都拥有。如果可以从逻辑上将您的主应用程序分成较小的应用程序,那么您应该这样做。每个应用程序都有自己的模型、urls.py、视图等。测试可以是每个应用程序的一部分。

根据我收集到的信息,更笼统的答案是:

  1. 如果可以从逻辑上将您的应用分解为更小的应用,他们应该有自己的 urls.py 观点。
  2. 每个应用程序都应在 urls.py 中定义 app_name
  3. 有时细分可能没有意义或可能无法提供自己的观点,例如 tests 应用。

对于我的问题,是的,avatarservices 都应该有自己的 urls.pyapp_name,比如 app_name = "avatar"app_name = "services" 分别。然后通过 ("avatar:<url_name>")("services:<url_name>") 访问它们。但是,在某些情况下,您可能不会这样做。例如,我的主应用程序中也有一个 tests 目录,但它只是单元和集成测试,并没有提供自己的 views.pyurls.py。这种情况没必要强求。

这是我目前的理解,如有错误,请随时纠正我!