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

Fro*_*ies 108 python django django-urls

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

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"),
]
Run Code Online (Sandbox Code Playgroud)

但是,在浏览Django教程时,他们使用的是path():

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="index"),        
]
Run Code Online (Sandbox Code Playgroud)

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

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

ikl*_*nac 144

来自Django的url文档

url(regex, view, kwargs=None, name=None)此函数是别名django.urls.re_path().它可能会在将来的版本中弃用.

path和之间的关键区别re_pathpath使用没有正则表达式的路由

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


Syl*_*ubo 52

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

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

可以写成:

path('articles/<int:year>/', views.year_archive)
Run Code Online (Sandbox Code Playgroud)

django.conf.urls.url() 以前版本的功能现在可用django.urls.re_path().旧位置仍然是为了向后兼容,没有即将弃用.旧django.conf.urls.include()功能现在可以导入,django.urls因此您可以使用:

from django.urls import include, path, re_path
Run Code Online (Sandbox Code Playgroud)

URLconfs中.进一步阅读django doc

  • 由于您的`path()`示例允许使用非四位数的数字,因此存在一些误导。 (7认同)
  • @silvablaze 正如 BrainCore 所说,“int”不等于“[0-9]{4}”。是否用于整数与此关系无关。也许如果您将“[0-9]{4}”替换为“[0-9]+”,您的比较可能会不太准确,尽管您可能仍然需要处理最终结果的类型(str vs int?) 。 (5认同)

Dan*_*man 16

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

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


Den*_*tin 7

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

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


小智 6

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

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

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

  • 是的,我认为如上所述要使用 RE,您必须改用 re_path() 函数。 (2认同)

小智 5

从 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'),

]
Run Code Online (Sandbox Code Playgroud)

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