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:
匹配模式
1、精确字符串格式:
path('articles/2017/', views.articles)
一个精确URL匹配一个操作函数;最简单的形式,适合对静态URL的响应;URL字符串不以“/”开头,但要以“/”结尾;
2、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 匹配任何非空字符串,包括路径分隔符,是全集
3、 正则表达式格式:
在正则表达式中定义变量,需要使用圆括号括起来。这个参数是有名字的,那么需要使用(?P<参数的名字>)。然后在后面添加正则表达式的规则。
例如:
re_path(r"^list/(?P<year>\d{4})/$",views.article_list),
re_path(r"^list/(?P<month>\d{2})/$",views.article_list_month)articles/(?p<year>[0-9]{4})/
借助正则表达式丰富语法表达一类URL(而不是一个);可以通过<>提取变量作为处理函数的参数,高级用法;使用该方法时,前面不能使用path()函数,必须使用re_path()函数;表达的全部是str格式,不能是其他类型。
两种形式:
不提取参数,比如re_path(articles/([0-9]{4}/,表示四位数字,每一个数字都是0到9的任意数字;
提取参数,命名形式(?P<name>pattern),比如:
re_path(articles/(?P<year>[0-9]{4})/,
将正则表达式提取的四位数字,每一个数字都是0到9的任意数字命名为year,