1. 关于正则的说明
    1. url(r'^detail-(\d+)-(\d+).html',views.detail), 当客户端输入 127.0.0.1:8000/detail-2-9.html时,Django默认可以得到3个参数,分别是request
    2. -(\d+)-,-(\d+)-。 所以定义detail函数的时候,需要把这3个参数都接收,否则会报错。当然了是严格按照顺序来写/获取到的。
    3. def detail(request,nid,uid):
    4. print(nid,uid)

Django基于正则表达式的URL - 图1

Django基于正则表达式的URL - 图2

2.默认情况下是严格按照顺序来获取得。但是如果想调整形式参数的时候,就会影响到整个程序。基于此,Django还支持正则表达式的分组。

  1. # 把第1个匹配的赋值给nid,把第2个匹配的赋值给uid.
  2. url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail),
  3. # 分组写的好处是,下列2个函数就无区别了。形式参数的位置不会影响代码的值。
  4. def detail(request,nid,uid)
  5. def detail(request,uid,nid)

Django基于正则表达式的URL - 图3

  1. args:接收的是元组,kwargs:接收的是字典类型的。
    Django基于正则表达式的URL - 图4

4.本节笔记

  1. 1.一个URL对应一个函数或者对应一个类
  1. url(r'^index/',views.index),url(r'^home/',views.Home.as_view())
  1. 2.一类URL对应一个函数或类
  1. url(r'^detail-(\d+)-(\d+).html',views.index) # 严格按照形式参数的位置给它传递的。
  1. 3.一类URL对应一个函数或类(用正则表达式的方法来做)推荐使用的。
  1. url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.index) # 形式参数的位置不影响值。传递参数的时候,是按照nid=1,uid=9,的样式传递的。
  2. def detail(request,*args,**kwargs) #args元组,kwargs字典。
  3. 如果是以url(r'^detail-(\d+)-(\d+).html',views.index)的形式传递的话,则都传到args里面了。因为传递形式是:1,2的格式。
  4. 如果是以url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.index)的形式的话,都传到kwargs里。因为传递形式是:nid=1,uid=2的格式
  1. <br />![](https://cdn.nlark.com/yuque/0/2021/png/501351/1637564816310-3355de25-8eed-4b2f-8953-96bf5bcd3da5.png#clientId=u5eb7f9f0-2a42-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u92b39c65&margin=%5Bobject%20Object%5D&originHeight=296&originWidth=997&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ue19b53e5-5b09-40f6-8ab9-7258a05ec24&title=)

参考文献

https://www.cnblogs.com/momo8238/p/7513767.html