我什么时候应该在“re_path”上使用“path”?

Yur*_*ots 9 python django django-urls

这是Django Docs 中的一个例子:

from django.urls import include, path

urlpatterns = [
    path('index/', views.index, name='main-view'),
    path('bio/<username>/', views.bio, name='bio'),
    ...
]
Run Code Online (Sandbox Code Playgroud)
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'),
    ...
]
Run Code Online (Sandbox Code Playgroud)

根据我的理解,path语法更具可读性,并提供了可以从 URL 捕获信息并转换类型的尖括号。

我应该re_path 只在需要正则表达式时使用并path用于所有其他情况吗?

joj*_*ojo 13

re_path是处理 urls的“旧”方式的实现,以前(版本 <2)由urlfrom完成django.conf.urls。

请参阅Django 2.0 发行说明中关于此的段落。

话虽如此,我建议path您尽可能使用!

我看到的原因:

  1. path引入的目的是让事情变得更简单,这显然是 Django 开发人员想要去的方向。因此,在使用时path遵循这个方向,从而最大限度地降低必须使代码库适应新变化的风险。

  2. 虽然path这不仅仅是试图让事情变得更简单的结果,但它实际上确实让事情变得更简单和更具可读性,path如果这两种选择都是一种选择,那么这就是为什么应该首选的一个很好的理由。

现在re_path存在是有原因的,所以在某些情况下使用re_path可能仍然是更好的选择。一种情况显然是当需要非常定制的转换器并达到使用'path' 的自定义转换器可行的极限时。另一个使用场景re_path可能是将具有相当复杂的 url 转换器的系统从 Django 1.x 升级到 2.x:简单地替换urlwithre_path命令可以更省时,因此是一种理想的方法。


Fra*_*ney 2

你说对了。新的path语法使得 URL 模式更加清晰。您也可以编写自己的路径转换器,以便更多的路径可以使用path而不是re_path.