【问题标题】:How to reverse 'url' of included urls in django如何在 django 中反转包含 url 的“url”
【发布时间】:2020-08-14 10:10:23
【问题描述】:

假设我的项目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 的最后放置一个虚拟视图,路径为"",然后将其反转。但是我不喜欢这个解决方案。感觉很老套,如果用户点击此 URL,可能会遇到问题。

【问题讨论】:

  • 我可以建议在你的 foo include 调用中包含一个命名空间。这将使 url 反转更好,并允许您使用多个具有相同名称的 url,只要命名空间不同。

标签: python django django-urls


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2015-04-23
    • 1970-01-01
    • 2012-01-04
    • 2017-05-08
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多