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、视图等。测试可以是每个应用程序的一部分。
根据我收集到的信息,更笼统的答案是:
- 如果可以从逻辑上将您的应用分解为更小的应用,他们应该有自己的
urls.py
观点。
- 每个应用程序都应在
urls.py
中定义 app_name
。
- 有时细分可能没有意义或可能无法提供自己的观点,例如
tests
应用。
对于我的问题,是的,avatar
和 services
都应该有自己的 urls.py
和 app_name
,比如 app_name = "avatar"
和app_name = "services"
分别。然后通过 ("avatar:<url_name>")
和 ("services:<url_name>")
访问它们。但是,在某些情况下,您可能不会这样做。例如,我的主应用程序中也有一个 tests
目录,但它只是单元和集成测试,并没有提供自己的 views.py
或 urls.py
。这种情况没必要强求。
这是我目前的理解,如有错误,请随时纠正我!
我想弄清楚在我的 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、视图等。测试可以是每个应用程序的一部分。
根据我收集到的信息,更笼统的答案是:
- 如果可以从逻辑上将您的应用分解为更小的应用,他们应该有自己的
urls.py
观点。 - 每个应用程序都应在
urls.py
中定义app_name
。 - 有时细分可能没有意义或可能无法提供自己的观点,例如
tests
应用。
对于我的问题,是的,avatar
和 services
都应该有自己的 urls.py
和 app_name
,比如 app_name = "avatar"
和app_name = "services"
分别。然后通过 ("avatar:<url_name>")
和 ("services:<url_name>")
访问它们。但是,在某些情况下,您可能不会这样做。例如,我的主应用程序中也有一个 tests
目录,但它只是单元和集成测试,并没有提供自己的 views.py
或 urls.py
。这种情况没必要强求。
这是我目前的理解,如有错误,请随时纠正我!