[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:

匹配模式

  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. 正则表达式格式:

    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参数
posted @ 2019-10-06 11:20  Moke丶青  阅读(542)  评论(0编辑  收藏  举报