首页 > 解决方案 > 如何在 django 中反转包含 url 的“url”

问题描述

假设我的项目urls.py看起来像这样:

urlpatterns = [
    path("admin/", admin.site.urls),
    path("foo/", include("foo.urls"), name="foo"),
]

然后我有一个文件foo/urls.py,其中有一些进一步的网址:

urlpatterns = [
    path("bar/", views.bar, name="bar"),
    path("baz/", views.baz, name="baz"),
]

我想做什么

获取将您带到包含的“网址”的“部分”网址。例如,我可以reverse("bar")做得到foo/bar. 但我似乎不能做reverse('foo') to get just foo`。有没有办法做到这一点。

一种(不理想的)解决方案

foo/urls.py我可以在最末端放置一个虚拟视图,路径为"",然后将其反转。但是我不喜欢这个解决方案。感觉很hacky,如果用户点击这个URL,可能会出现问题。

标签: pythondjangodjango-urls

解决方案


您不理想的解决方案实际上正是 Django 中的预期方式。foo.urls这意味着在:中添加路径path("", views.index, name="foo")

我知道这对您来说感觉很奇怪,但目前 /foo 路径没有引用您服务器上的资源,因为尚未定义它的路径。Django 甚至无法逆转这条路径,因为它没有任何意义。

如果您仍然想反转路径,而 Django 将返回 404 错误,您实际上必须定义一个返回 404 响应的简单视图。


推荐阅读