欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

django1.X路由的url与2.X路由path语法理解区别

程序员文章站 2024-02-14 15:09:40
...
引用路径的区别:
  • 1.X: 使用的是django.conf.urls.url, django.conf.urls.include
  • 2.X: 使用的是django.urls.path, django.urls.include, django.urls.re_path
引入正则的区别:
  • 1.X:
    下面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图
    在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。
    在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。
urlpatterns = [
    url('index-(\d+)-(\d+).html',views.index),
    url('index-(?P<article_type_id>\d+)-(?P<category_id>\d+).html',views.index)
]
#url请求地址为:http://127.0.0.1:8000/index-1-1.html

  • 2.X:
    基本规则:
  • 使用尖括号(<>)从url中捕获值。
  • 捕获值中可以包含一个转化器类型(converter type),比如使用 <int:name> 捕获一个整数变量。若果没 有转化器,将匹配任何字符串,当然也包括了 / 字符。
  • 无需添加前导斜杠。
urlpatterns = [
    path('index-<int:article_type_id>-<int:category_id>.html',views.index),
]
#url请求地址为:http://127.0.0.1:8000/index-1-1.html

在Python正则表达式中,命名式分组语法为 (?P<name>pattern) ,其中name为名称, pattern为待匹配的模式。这个与1.X的用法差不多,就是将1.X的url,改为re_path,
例子:

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path('articles/(?P<year>[0-9]{4})/', views.year_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[^/]+)/', views.article_detail),
]

转载于:https://www.jianshu.com/p/a7cb81602e19