引用路径的区别:
- 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),
]
网友评论