我啥时候应该在“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 的实现,之前(版本 urldjango.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”?的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候应该在课堂上使用“this”?

我啥时候应该在 NavLink 上使用 Link?

我啥时候应该在 django 模型字段上使用 null=False

我啥时候应该在“class”上使用“className”,反之亦然?

jQuery UI - 我啥时候应该在小部件上使用 destroy 方法

我啥时候应该在独立的 node.js 上使用 express.js