【转】django 正则URL 匹配
django 正则URL 匹配
一、引子
在day17 作业中,我们查看主机详细信息的时候,是通过 在url 中拼接,传参数。urls 中匹配 path("detail/",views.detail)
这样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 代码:
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})
urls
前端,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>
结果:
2.2 下面用 正则表达式来 搞URL 匹配,静态页面,
urls
views ,
直接在函数中传参数,nid 形式参数。不像之前需要自己到 reques.method 中去取
结果
上面的栗子中,我们得知参数是通过形参传递的,类似定义函数的形参数,
下面再搞一个栗子验证
参数位置变换后 ,获取的数值也变了
三、分组传参
在上面的栗子中,我们知道如果不分组,那么参数就是类似函数的位置参数,靠天吃饭,
很显然,这样不方便我们在实际的使用中去调用。那么使用关键字参数呢,在URL 匹配中就需要分组
下面搞栗子,变换nid,uid 位置之后,打印的结果是一样的。
位置参数可以在 *arg 中获取,关键字参数可以在 **kwargs 中获取
四、总结
路由系统: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接收,推荐使用这个
【转】django 正则URL 匹配的更多相关文章
- Django中url匹配规则的补充
Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...
- django的url匹配流程
URL匹配流程(路由解析顺序): URL匹配流程说明 域名.端口.端口后的 /,以及查询字符串(问号后面的键值参数)不参与匹配 先到项目下的 urls.py 进行匹配,再到应用的 urls.py 匹配 ...
- Django学习手册 - 正则URL路由配置/路由分发
############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...
- Django 路由正则URL
Django 路由正则URL URL1 # 路由 url(r'^detail/', views.detail) {#点击跳转到指定用户下显示信息#} <li><a target=&q ...
- Django——URL详解/Django中URL是如何与urls文件匹配的
URL标准语法 protocol://hostname[:port]/path/[:parameters][?query]#fragment https://i.cnblogs.com/EditPos ...
- Django的url解析
Django中采用正则表达式来匹配所请求的url,这个叫做URLconf,作为MVC中的C(控制器), 这样再调用相应的试图,达到控制器控制试图的显示的效果. 看一下Django的url解析过程 第一 ...
- Django中url使用命名空间的错误
出的错误: 1. Reverse for 'llist' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) ...
- Django的URL路由系统
一. URL配置 URL配置就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图之间的映射表.你就是以这种方式告诉Django,对于哪个URL调用的这段代码. 基本格式 from ...
- Django之URL路由系统
一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...
随机推荐
- jt获取鼠标指针的位置
屏幕 screenX和screenY属性表示鼠标在整个显示屏的位置,从屏幕(而不是浏览器)的左上角开始计算的. 页面 pageX和pageY属性表示鼠标指针在这个页面的位置.页面的顶部可能在可见区域之 ...
- 新手解惑:nginx&php-fpm&fastcgi 是什么关系
首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index ...
- TP框架对数据库的基本操作
数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找 ...
- YOLOv3 算法的详细说明
YOLOv3没有太多的创新,主要是借鉴一些好的方案融合到YOLO里面.不过效果还是不错的,在保持速度优势的前提下,提升了预测精度,尤其是加强了对小物体的识别能力. 本文主要讲v3的改进,由于是以v1和 ...
- 关于addEventListener中事件函数的this指向问题
看代码: //定义一个可见的盒子用于绑定点击事件 var box = document.getElementById('box'); box.x = 'box' //设置执行函数的对象属性 funct ...
- Nginx配置之rewrite、proxy_pass、upstream、location
如图,这是Nginx的配置文件nginx.conf中的一段配置代码. 在http段中定义了一个名为webservers的upstream模块,主要用于负载均衡. 在server模块中,定义了一个loc ...
- java webservice - cxf使用总结 一
1.创建maven项目 加入pom依赖 <dependency> <groupId>org.apache.cxf</groupId> <artifactId& ...
- 多线程06-Lock
; i < ; i++) { c.Increment(); c.Decrement(); ...
- [Web 前端] 010 css 常用的边框设置
css 常用边框属性 概览 参数 释义 border u设置边框属性(可以多个) border-color 边框颜色 border-style 边框样式solid 实线,dotted 点状线,dash ...
- Java8 特性详解(一) Lambda
为什么要使用lambda表达式 从函数式接口说起 理解Functional Interface(函数式接口)是学习Java8 lambda表达式的关键所在. 函数式接口的定义其实很简单:任何接口,如果 ...