[django] 2.x路由系统匹配path
path
django2.x路由系统已经替换成下面的写法(官方文档):
url的路由表示用path和re_path代替,模块的导入由django1.x版本的:
from django.conf.urls import url,include
变成现在的Django2.x中的:
from django.urls import path, re_path, include:
匹配模式
-
精确字符串格式:
path('articles/2017/', views.articles)
一个精确URL匹配一个操作函数;最简单的形式,适合对静态URL的响应;URL字符串不以“/”开头,但要以“/”结尾;
-
Django的转换格式: <类型:变量名>,articles/<int:year>/
from django.urls import path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail), ]
是一个URL模版,匹配URL同时在其中获得一批变量作为参数;是一种常用形式,目的是通过URL进行参数获取和传递;
转换格式类型:
Str 匹配除分隔符(/)外的非空字符,默认类型<year>等价于<str:year> Int 匹配0和正整数 Slug 匹配字母、数字、横杠、下划线组成的字符串,str的子集 Uuid 匹配格式化的UUID,如075194d3-6885-417e-a8a8-6c931e272f00 path 匹配任何非空字符串,包括路径分隔符,是全集
-
正则表达式格式:
articles/(?p<year>[0-9]{4})/
借助正则表达式丰富语法表达一类URL(而不是一个);可以通过<>提取变量作为处理函数的参数,高级用法;使用该方法时,前面不能使用path()函数,必须使用re_path()函数;表达的全部是str格式,不能是其他类型。
两种形式:不提取参数,比如re_path(articles/([0-9]{4}/,表示四位数字,每一个数字都是0到9的任意数字;提取参数,命名形式(?Ppattern),比如re_path(articles/(?P[0-9]{4})/,将正则表达式提取的四位数字,每一个数字都是0到9的任意数字命名为year,
参数说明:
- 正则表达式:一个正则表达式字符串
- views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
- 参数:可选的要传递给视图函数的默认参数(字典形式)
- 别名:一个可选的name参数