当多个URL具有相同名称时使用django reverse()

时间:2015-07-29 18:55:38

标签: python django

我继承了一个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的正则表达式。

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

1 个答案:

答案 0 :(得分:6)

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

例如:

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

然后假设每个app的url.py文件包含name =“edit”条目,你可以这样做: reverse("app1:edit") --> app1/edit/ reverse("app2:edit") --> app2/edit/

玩得开心!