一、引子

  在day17 作业中,我们查看主机详细信息的时候,是通过 在url 中拼接,传参数。urls 中匹配  path("detail/",views.detail)

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

这样url 变成类似  http://127.0.0.1:8000/detail/?nid=2  今天我们来学习,类似 http://127.0.0.1:8000/detail-3.html 这样的URL

据说,以前我们使用的方式 ,在seo 时候算是动态页面,后面这种方式算静态页面。可能在做搜索优化的时候有好处吧。

二、开搞栗子

  忽略掉数据库,先在 views 新建一个用户字典

  2.1 动态页面的栗子

    views 代码:

  

【转】django 正则URL 匹配
    





		
django 正则URL 匹配
 1 info_dic={
 2     1:{"name":"zhangsan","email":"zhangsan@163.com","age":22},
 3     2:{"name":"lisi","email":"lisi@163.com","age":27},
 4     3:{"name":"wangwu","email":"wangwu@163.com","age":29},
 5     4:{"name":"laoliu","email":"laoliu@163.com","age":30},
 6     5:{"name":"chenpi","email":"chenpi@163.com","age":32},
 7 }
 8 
 9 def index(request):
10     return render(request,"index.html",{"info_dic":info_dic})
11 
12 
13 def detail(request):
14     nid=request.GET.get("nid")
15     print(nid,type(nid))
16     info=info_dic.get(int(nid))
17     print(info)
18     return render(request,"detail.html",{"info":info})
【转】django 正则URL 匹配
    





		
django 正则URL 匹配

    urls

  【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  前端,index.html,

【转】django 正则URL 匹配
    





		
django 正则URL 匹配
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>用户信息</h1>
 9 
10     <ul>
11         {% for k,v in info_dic.items %}
12             <li><a target="_blank" href="/detail/?nid={{ k }}">{{ v.name }}</a></li>
13         {% endfor %}
14 
15     </ul>
16 
17 
18 
19 </body>
20 </html>
【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  前端,detail

【转】django 正则URL 匹配
    





		
django 正则URL 匹配
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>用户详细信息</h1>
 9 
10     <ul>
11         <li>name:{{ info.name }}</li>
12         <li>email:{{ info.email }}</li>
13         <li>age:{{ info.age }}</li>
14     </ul>
15 </body>
16 </html>
【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  结果:

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

2.2 下面用 正则表达式来 搞URL 匹配,静态页面,

  urls

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  views ,

直接在函数中传参数,nid 形式参数。不像之前需要自己到 reques.method 中去取

 【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  结果

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

上面的栗子中,我们得知参数是通过形参传递的,类似定义函数的形参数,

  下面再搞一个栗子验证

 

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

 

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

参数位置变换后 ,获取的数值也变了

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

 

三、分组传参

  在上面的栗子中,我们知道如果不分组,那么参数就是类似函数的位置参数,靠天吃饭,

很显然,这样不方便我们在实际的使用中去调用。那么使用关键字参数呢,在URL 匹配中就需要分组

下面搞栗子,变换nid,uid 位置之后,打印的结果是一样的。

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

位置参数可以在 *arg 中获取,关键字参数可以在 **kwargs 中获取

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

四、总结

路由系统:URL

  1. 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
  2. 顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),这个用*args接收
  3. 关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),这个用**kwargs接收,推荐使用这个

一、引子

  在day17 作业中,我们查看主机详细信息的时候,是通过 在url 中拼接,传参数。urls 中匹配  path("detail/",views.detail)

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

这样url 变成类似  http://127.0.0.1:8000/detail/?nid=2  今天我们来学习,类似 http://127.0.0.1:8000/detail-3.html 这样的URL

据说,以前我们使用的方式 ,在seo 时候算是动态页面,后面这种方式算静态页面。可能在做搜索优化的时候有好处吧。

二、开搞栗子

  忽略掉数据库,先在 views 新建一个用户字典

  2.1 动态页面的栗子

    views 代码:

  

【转】django 正则URL 匹配
    





		
django 正则URL 匹配
 1 info_dic={
 2     1:{"name":"zhangsan","email":"zhangsan@163.com","age":22},
 3     2:{"name":"lisi","email":"lisi@163.com","age":27},
 4     3:{"name":"wangwu","email":"wangwu@163.com","age":29},
 5     4:{"name":"laoliu","email":"laoliu@163.com","age":30},
 6     5:{"name":"chenpi","email":"chenpi@163.com","age":32},
 7 }
 8 
 9 def index(request):
10     return render(request,"index.html",{"info_dic":info_dic})
11 
12 
13 def detail(request):
14     nid=request.GET.get("nid")
15     print(nid,type(nid))
16     info=info_dic.get(int(nid))
17     print(info)
18     return render(request,"detail.html",{"info":info})
【转】django 正则URL 匹配
    





		
django 正则URL 匹配

    urls

  【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  前端,index.html,

【转】django 正则URL 匹配
    





		
django 正则URL 匹配
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>用户信息</h1>
 9 
10     <ul>
11         {% for k,v in info_dic.items %}
12             <li><a target="_blank" href="/detail/?nid={{ k }}">{{ v.name }}</a></li>
13         {% endfor %}
14 
15     </ul>
16 
17 
18 
19 </body>
20 </html>
【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  前端,detail

【转】django 正则URL 匹配
    





		
django 正则URL 匹配
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>用户详细信息</h1>
 9 
10     <ul>
11         <li>name:{{ info.name }}</li>
12         <li>email:{{ info.email }}</li>
13         <li>age:{{ info.age }}</li>
14     </ul>
15 </body>
16 </html>
【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  结果:

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

2.2 下面用 正则表达式来 搞URL 匹配,静态页面,

  urls

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  views ,

直接在函数中传参数,nid 形式参数。不像之前需要自己到 reques.method 中去取

 【转】django 正则URL 匹配
    





		
django 正则URL 匹配

  结果

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

上面的栗子中,我们得知参数是通过形参传递的,类似定义函数的形参数,

  下面再搞一个栗子验证

 

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

 

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

参数位置变换后 ,获取的数值也变了

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

 

三、分组传参

  在上面的栗子中,我们知道如果不分组,那么参数就是类似函数的位置参数,靠天吃饭,

很显然,这样不方便我们在实际的使用中去调用。那么使用关键字参数呢,在URL 匹配中就需要分组

下面搞栗子,变换nid,uid 位置之后,打印的结果是一样的。

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

位置参数可以在 *arg 中获取,关键字参数可以在 **kwargs 中获取

【转】django 正则URL 匹配
    





		
django 正则URL 匹配

四、总结

路由系统:URL

  1. 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
  2. 顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),这个用*args接收
  3. 关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),这个用**kwargs接收,推荐使用这个

相关文章: