我啥时候应该在“re_path”上使用“path”?
Posted
技术标签:
【中文标题】我啥时候应该在“re_path”上使用“path”?【英文标题】:When should I use 'path' over 're_path'?我什么时候应该在“re_path”上使用“path”? 【发布时间】:2019-08-12 15:00:59 【问题描述】:这是来自Django Docs的示例:
from django.urls import include, path
urlpatterns = [
path('index/', views.index, name='main-view'),
path('bio/<username>/', views.bio, name='bio'),
...
]
from django.urls import include, re_path
urlpatterns = [
re_path(r'^index/$', views.index, name='index'),
re_path(r'^bio/(?P<username>\w+)/$', views.bio, name='bio'),
...
]
据我了解,path
语法更具可读性,并提供尖括号,可以从 URL 中捕获信息并转换类型。
我是否应该仅在需要正则表达式时使用re_path
,而在所有其他情况下使用path
?
【问题讨论】:
【参考方案1】:re_path
是 'old' way of handling urls 的实现,之前(版本 url
从 django.conf.urls
完成。
请参阅Django 2.0 release notes 中关于此的段落。
话虽如此,我建议尽可能使用path
!
我看到的原因:
path
的引入是为了让事情变得更简单,这显然是 Django 开发人员想要发展的方向。因此,当使用 path
时,您将遵循这个方向,从而最大限度地降低您的代码库必须适应新变化的风险。
虽然path
不仅仅是为了让事情变得更简单,但它实际上确实让事情变得更简单、更易读,这就是为什么如果两个选择都是选项。
现在re_path
存在是有原因的,所以在某些情况下使用re_path
可能仍然是更好的选择。一种情况显然是需要非常定制的转换器并达到custom converters for 'path' 可行的限制。使用re_path
的另一种情况可能是在将具有相当复杂的url 转换器的系统从Django 1.x 升级到2.x 时:简单地将url
替换为re_path
命令可以更省时因此是一种理想的方法。
【讨论】:
【参考方案2】:你明白了。较新的 path
语法使 URL 模式更加清晰。你也可以write your own path converters,这样你的更多路径可以使用path
而不是re_path
。
【讨论】:
以上是关于我啥时候应该在“re_path”上使用“path”?的主要内容,如果未能解决你的问题,请参考以下文章
我啥时候应该在 django 模型字段上使用 null=False
我啥时候应该在“class”上使用“className”,反之亦然?