1、引子
在day17 做业中,咱们查看主机详细信息的时候,是经过 在url 中拼接,传参数。urls 中匹配 path("detail/",views.detail)html
这样url 变成相似 http://127.0.0.1:8000/detail/?nid=2 今天咱们来学习,相似 http://127.0.0.1:8000/detail-3.html 这样的URL前端
听说,之前咱们使用的方式 ,在seo 时候算是动态页面,后面这种方式算静态页面。可能在作搜索优化的时候有好处吧。正则表达式
2、开搞栗子
忽略掉数据库,先在 views 新建一个用户字典数据库
2.1 动态页面的栗子django
views 代码:函数
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})
urlspost
前端,index.html,学习
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>
前端,detail优化
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>
结果:ui
2.2 下面用 正则表达式来 搞URL 匹配,静态页面,
urls
views ,
直接在函数中传参数,nid 形式参数。不像以前须要本身到 reques.method 中去取
结果
上面的栗子中,咱们得知参数是经过形参传递的,相似定义函数的形参数,
下面再搞一个栗子验证
参数位置变换后 ,获取的数值也变了
3、分组传参
在上面的栗子中,咱们知道若是不分组,那么参数就是相似函数的位置参数,靠天吃饭,
很显然,这样不方便咱们在实际的使用中去调用。那么使用关键字参数呢,在URL 匹配中就须要分组
下面搞栗子,变换nid,uid 位置以后,打印的结果是同样的。
位置参数能够在 *arg 中获取,关键字参数能够在 **kwargs 中获取
4、总结
路由系统:URL
- 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
- 顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),这个用*args接收
- 关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),这个用**kwargs接收,推荐使用这个