Django url配置多个url匹配

tza*_*nke 4 python django

在我们的一个Django应用程序中,我们为视图定义了多个URL.

第一个URL与pk和第二个匹配组的常规功能相匹配.第二个URL匹配子功能与pk.

在这两个网址之间定义了更多网址,因此不容易同时看到它们.或者,例如,子特征将具有其自己的url.py.

# old urls.py
url(r'^(?P<pk>\d+)/', views.b),
url(r'^subfeature/', views.a),
Run Code Online (Sandbox Code Playgroud)

一段时间后,pk中也允许使用字母,所以我们现在必须将\ d +更改为[^ /] +.

# new urls.py
url(r'^(?P<pk>[^/]+)/', views.b),
url(r'^subfeature/', views.a),
Run Code Online (Sandbox Code Playgroud)

现在子特征因为网址没有正确匹配而中断,"子特征" 在第一个网址中匹配为pk.

更改网址正则表达式时如何避免破坏其他网址?

knb*_*nbk 9

对此没有一般的答案.任何使网址更通用的更改都可能会破坏其后的其他网址.

在这种情况下,您可以交换网址,以便subfeature/匹配子功能网址,并且任何其他网址都将通过并匹配views.b:

url(r'^subfeature/', views.a),
url(r'^(?P<pk>[^/]+)/', views.b),
Run Code Online (Sandbox Code Playgroud)


Pet*_*ain 6

我的建议是,您应该将类​​似的命名原则应用为RESTful接口,因此不要将原始PK单独作为URL公开.

相反,您应该始终提供某种命名空间,以明确您的URL引用的内容.例如:

# new urls.py
url(r'^feature/(?P<pk>[^/]+)/', views.b),
url(r'^subfeature/', views.a),
Run Code Online (Sandbox Code Playgroud)

这不仅可以解决您的问题,还可以防止多个表PK之间的混淆,并使将来更容易扩展.顺便说一句,它也符合django文档.

只要您也可以控制GUI,这应该是一个简单的更改.但是,如果必须保留现有URL ,则其他答案更合适.