问题:对于Django 2.0,在urls.py中使用path()或url()更好吗?
在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"),
]
但是,在阅读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()与开始我们吗?还是针对不同工作使用不同工具的情况?
回答 0
从Django文档获取url
url(regex, view, kwargs=None, name=None)此函数是的别名django.urls.re_path()。在将来的版本中可能不推荐使用。
path和之间的主要区别re_path是path使用不带正则表达式的路由
您可以re_path用于复杂的正则表达式调用,也可以仅path用于更简单的查找
回答 1
新django.urls.path()功能允许使用更简单,更易读的URL路由语法。例如,此示例来自先前的Django版本:
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
可以写成:
path('articles/<int:year>/', views.year_archive)
django.conf.urls.url() 以前版本中的功能现在可以作为django.urls.re_path()。保留旧位置是为了向后兼容,而不会很快淘汰。django.conf.urls.include()现在django.urls可以从导入旧功能,因此您可以使用:
from django.urls import include, path, re_path
在URLconfs中。进一步阅读django doc
回答 2
pathDjango 2.0只是几周前才发布的新功能。大多数教程都不会针对新语法进行更新。
当然,这应该是一种更简单的处理方式。我不会说URL更强大,但是您应该能够以任何一种格式表示模式。
回答 3
正则表达式似乎不适用于path()具有以下参数的函数:path(r'^$', views.index, name="index")。
应该是这样的:path('', views.index, name="index")。
第一个参数必须为空才能输入正则表达式。
回答 4
Path是Django 2.0的新功能。在这里解释:https : //docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
看起来更像pythonic方式,并允许在传递给视图的参数中不使用正则表达式…例如,您可以使用int()函数。
回答 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'),
]
其中posts是应用程序,而post_home是views.py中的函数
