文章目录
- import re path = “articles/2021/11/” # 使用 正则去匹配路由 res = re.search(r’^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$’,path) if not res: print(“匹配失败!”) else: # 提取path参数,利用分组 kwargs = res.groupdict() 利用分组我们就可以正常的把里面path参数获取到: {‘year’: ‘2021’, ‘month’: ’11’}
- # 伪代码,调用视图, # 这中情况可能会更友好,直接通过关键词方式调用,不影响我们方法定义的时候参数位置 # 但是实际django利用的是位置参数传递 month_archive(request,**kwargs) # 上面的就等价于 month_archive(request, year=”2021″, month=”11″) # 下面是位置参数传递,注意这是在正则提取的结果上进一步操作 # 1. 提取分组结果 args = res.groups() #(‘2021′, ’11’) # 2. 调用视图,这样就限制了其位置 month_archive(request,*args) # 上面的代码等价于 month_archive(request,”2011″,”11″)
目录
- django路由匹配示例
- 路由参数传递剖析
- 1.利用正则分组匹配获取分组参数
- 2.我们利用解包特性把对应的参数传递给视图
- 总结
下面是我们的示例代码:
# 路由
from django.urls import path, re_path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
# 2.0以前版本 是url,现在是re_path 主要是通过正则来匹配
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
]
# 视图层
def month_archive(request,year,month):
pass
django是如何把路由参数获取并传递给视图呢?
从字面上我们可以看出来来,【正则路】所以这里面它巧妙的利用了正则的分组特性,并通过参数解包特性来完成,下面我们演示下大致的流程
假设:我们访问了的path是: articles/2021/11/
import re
path = "articles/2021/11/"
# 使用 正则去匹配路由
res = re.search(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',path)
if not res:
print("匹配失败!")
else:
# 提取path参数,利用分组
kwargs = res.groupdict()
利用分组我们就可以正常的把里面path参数获取到:
{'year': '2021', 'month': '11'}
# 伪代码,调用视图,
# 这中情况可能会更友好,直接通过关键词方式调用,不影响我们方法定义的时候参数位置
# 但是实际django利用的是位置参数传递
month_archive(request,**kwargs)
# 上面的就等价于 month_archive(request, year="2021", month="11")
# 下面是位置参数传递,注意这是在正则提取的结果上进一步操作
# 1. 提取分组结果
args = res.groups() #('2021', '11')
# 2. 调用视图,这样就限制了其位置
month_archive(request,*args)
# 上面的代码等价于 month_archive(request,"2011","11")
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- Django url 路由匹配过程详解
- Django视图与URLs路由的使用方式
- Django在urls.py利用函数path()配置路由时传递参数给调用的视图函数的方法(推荐)
- Python中Django的路由配置详解
- Django路由Path方法的实现
- Django url.py path name同一app下路由别名定义
- Django框架之路由用法