【转】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调用的视图函数之间的映射表.你就是以这 ...
随机推荐
- beanstalkd 安装和配置
安装 安装以centos为例 yum install beanstalkd 配置 使用centos yum安装,通过查看服务脚本发现有这个配置文件 cat /etc/sysconfig/beansta ...
- fiddler模拟弱网操作
弱网是app测试需要覆盖的一种场景 目录 1.认识弱网 2.fiddler模拟弱网配置 3.弱网下可能发生的问题 1.认识弱网 弱网.2G.3G建议的上下行速率如下,同时还可以控制丢包率的数据 网络 ...
- Free Pascal User’s Guide
https://www.freepascal.org/docs-html/current/user/user.html
- 阅读笔记12-Java 面试题 —— 老田的蚂蚁金服面试经历
电话一面 1.自我介绍.自己做的项目和技术领域 2.项目中的监控:那个监控指标常见的哪些? 3.微服务涉及到的技术以及需要注意的问题有哪些? 4.注册中心你了解了哪些? 5.consul 的可靠性你了 ...
- Value Iteration Algorithm for MDP
Value-Iteration Algorithm: For each iteration k+1: a. calculate the optimal state-value function for ...
- 002/区块链核心概念与原理详解(Mooc)
1.课程介绍 (一).区块链前世今生 密码朋克--神秘组织(邮件组) 2.区块链核心概念与原理 (一)比特币是数字货币 为什么叫区块链? 因为比特币系统里面的数据是一个个的区块来存储,并且通过hash ...
- 兼容IE浏览器保存Cookie
兼容IE:Response.Cookies[":member"].Expires=DateTime.Now.AddDays(1); 其它浏览器:Response.Cookies[& ...
- Apache httpclient拦截器对请求进行签名
Apahce httpclient 提供HttpRequestInterceptor和HttpResponseInterceptor两种拦截器分别处理请求和响应数据,下面讲一下如何对http请求进行拦 ...
- sql中的isnull
ISNULL 使用指定的替换值替换 NULL. 语法ISNULL ( check_expression , replacement_value ) 参数check_expression 将被检查是否为 ...
- Android之异步调用
概述 AsyncTask可以很好的,准确的使用UI线程,他可以将一个比较耗时(几秒钟)的动作运行在后台,并且能将结果返回至UI线程中,不需要通过(Thread操作和Handler操作). 使用时必须通 ...