【问题标题】:Using django reverse() when multiple URLs have the same name当多个 URL 具有相同名称时使用 django reverse()
【发布时间】:2015-07-29 18:55:37
【问题描述】:

我继承了一个 Django 应用程序,它在 urls.py 中有这样的条目:

url(r'/abc$', 'app.views.foo', name='foo'),
url(r'/def$', 'app.views.foo', name='foo'),
url(r'^/something$|/other$', 'app.views.foo', name='foo'),

所以我不仅有几个名为 'foo' 的 url 模式,而且一些模式还包含一个可以匹配多个不同 url 的正则表达式。

如果我使用 reverse('foo'),我会得到哪一个?

【问题讨论】:

    标签: python django


    【解决方案1】:

    进行快速测试,它返回了“最后一个”。你可以很容易地测试它。 在您的示例中,您有语法错误“。”而不是“,”在前 2 个模式之后。 顺便说一句,您不应该在同一个 APP 中拥有同名的 url,名称的想法是从应该代表 URL 的“唯一名称”中获取 URL。 您可以在不同的应用程序中拥有相同名称的 URL,然后使用“命名空间”参数来反转。

    例如:

    .... url(r'^app1/', include('apps.app1.urls', namespace='app1', app_name='app1')), url(r'^app2/', include('apps.app2.urls', namespace='app2', app_name='app2')),

    然后假设每个应用程序的 url.py 文件都包含一个 name="edit" 条目,您可以这样做: reverse("app1:edit") --> app1/edit/ reverse("app2:edit") --> app2/edit/

    玩得开心!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多