在我们的一个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.
更改网址正则表达式时如何避免破坏其他网址?
对此没有一般的答案.任何使网址更通用的更改都可能会破坏其后的其他网址.
在这种情况下,您可以交换网址,以便subfeature/匹配子功能网址,并且任何其他网址都将通过并匹配views.b:
url(r'^subfeature/', views.a),
url(r'^(?P<pk>[^/]+)/', views.b),
Run Code Online (Sandbox Code Playgroud)
我的建议是,您应该将类似的命名原则应用为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 ,则其他答案更合适.
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |