何时应该使用'path'而不是're_path'?

18

以下是来自Django文档的示例:

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吗?

3个回答

28

re_path是处理URL的旧的方式的一种实现,之前(版本<2)是由django.conf.urls中的url完成的。

请参阅有关此事的Django 2.0发布说明中的段落。

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

我认为原因如下:

  1. path的目标是使事情更简单,这显然是Django开发人员想要走的方向。因此,使用path可以遵循这个方向,从而最小化必须调整代码库以适应新变化的风险。

  2. 虽然path不仅仅是为了让事情更简单,但它确实使事情更简单、更易读,这就足以成为为什么应该首选path的好理由,如果两种选择都可以的话。

现在存在re_path是有原因的,所以在某些情况下,使用re_path可能仍然是更好的选择。一个场景显然是需要非常定制的转换器,并且已经达到了'path'的自定义转换器可行范围的情况。另一个使用re_path的场景可能是从Django 1.x升级到2.x的相当复杂的URL转换器系统:仅仅用re_path命令替换url命令可以更加高效,因此是一种可取的方法。

2
你懂得。新的path语法可以使URL模式更加清晰。你也可以编写自己的路径转换器,这样更多的路径就可以使用path而不是re_path了。最初的回答。

-3
在Django的URL模式中,使用path和re_path之间的选择取决于URL模式的复杂性和您的具体要求。以下是一些指南,以帮助您决定何时使用每个选项:
1- 简单的URL模式:对于大多数情况,特别是处理没有任何复杂匹配要求的简单URL模式时,建议使用path。path函数提供了更清晰和更可读的语法,使其更易于理解和维护。
使用path的示例:
``` path('bio//', views.bio, name='bio') ```
2- 正则表达式和高级匹配:如果您的URL模式需要使用正则表达式进行更高级的匹配,或者具有复杂的匹配模式,则re_path是更好的选择。re_path允许您使用正则表达式定义URL模式,提供更大的灵活性。
使用re_path的示例:
``` re_path(r'^bio/(?P\w+)/$', views.bio, name='bio') ```
3- Django版本:如果您使用的是Django 2.0或更高版本,通常建议尽可能使用path而不是re_path。path是首选且更现代的定义URL模式的方式,它更直观、更易于阅读。
4- 性能考虑:就性能而言,path通常比re_path更高效,因为它依赖简单的字符串匹配,而re_path涉及正则表达式匹配,对于复杂的模式可能会较慢。
总之,大多数情况下请使用path,特别是在处理简单明了的URL模式时。将re_path保留给需要使用正则表达式进行高级匹配的情况。如果您使用的是Django 2.0或更高版本,尽可能优先选择path,以提高可读性和可维护性。

1
禁止使用ChatGPT发布答案。请参阅https://meta.stackoverflow.com/questions/421831/temporary-policy-chatgpt-is-banned - Eric Aya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接