在urls.py中为django 2.0使用path()或url()会更好吗?

时间:2017-12-22 21:37:38

标签: python django django-urls

在django在线课程中,教师让我们使用url()函数调用视图并使用urlpatterns列表中的正则表达式。我在youtube上看过其他的例子。 e.g。

from django.contrib import admin
from django.urls import include
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^polls/', include('polls.urls')),
]


#and in polls/urls.py

urlpatterns = [        
    url(r'^$', views.index, name="index"),
]

然而,在浏览Django教程时,他们使用path()代替例如:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="index"),        
]

此外,正则表达式似乎不适用于path()函数,因为使用path(r'^$', views.index, name="index")将无法找到mysite.com/polls/视图。

正在使用path()没有正则表达式匹配正确的方法吗? url()更强大但更复杂,所以他们使用path()来启动我们吗?或者是针对不同工作的不同工具的情况?

6 个答案:

答案 0 :(得分:114)

来自url

的Django文档
  

url(regex, view, kwargs=None, name=None)此功能   是django.urls.re_path()的别名。它很可能会被弃用   未来发布。

pathre_path之间的主要区别在于path使用没有正则表达式的路由

您可以使用re_path进行复杂的正则表达式调用,仅使用path进行更简单的查找

答案 1 :(得分:41)

新的django.urls.path()函数允许更简单,更易读的URL路由语法。例如,以前Django发布的这个例子:

from collections import Counter
Counter(start_digits)

可以写成:

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)

以前版本的 path('articles/<int:year>/', views.year_archive) 功能现在可用django.urls.re_path()。旧位置仍然是为了向后兼容,没有即将弃用。旧的 django.conf.urls.url() 功能现在可以从 django.conf.urls.include() 导入,因此您可以使用:

django.urls
URLconfs 中的

。如需进一步阅读django doc

答案 2 :(得分:16)

path是Django 2.0中的新功能,仅在几周前发布。大多数教程都不会针对新语法进行更新。

当然应该是一种更简单的做事方式;我不会说URL更强大,你应该能够以任何一种格式表达模式。

答案 3 :(得分:6)

Path是Django 2.0的新功能。 在这里解释: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0

看起来更像pythonic方式,并且不允许在传递给视图的参数中使用正则表达式...你可以使用ue int()函数作为例子。

答案 4 :(得分:5)

正则表达式似乎不适用于具有以下参数的path()函数:path(r'^$', views.index, name="index")

应该是这样的:path('', views.index, name="index")

第一个参数必须为空,才能输入正则表达式。

答案 5 :(得分:0)

从v2.0开始,许多用户正在使用path,但是我们可以使用path或url。 例如在Django 2.1.1中 通过url映射到函数可以完成以下操作

from django.contrib import admin
from django.urls import path

from django.contrib.auth import login
from posts.views import post_home
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^posts/$', post_home, name='post_home'),

]

其中posts是应用程序,而post_home是views.py中的函数