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

Joh*_*don 1 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'),
Run Code Online (Sandbox Code Playgroud)

因此,我不仅有几个名为'foo'的url模式,而且某些模式还包含可以匹配多个不同URL的正则表达式.

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

小智 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')),

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

玩得开心!