django中路由匹配中正则提取参数机制详解

 更新时间:2025年05月14日 11:12:43   作者:stzhuce  
这篇文章主要介绍了django中路由匹配中正则提取参数机制方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

django路由匹配示例

下面是我们的示例代码:

# 路由
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/

1.利用正则分组匹配获取分组参数

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'}

2.我们利用解包特性把对应的参数传递给视图

# 伪代码,调用视图,
# 这中情况可能会更友好,直接通过关键词方式调用,不影响我们方法定义的时候参数位置
# 但是实际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")

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用实现XlsxWriter创建Excel文件并编辑

    使用实现XlsxWriter创建Excel文件并编辑

    今天小编就为大家分享一篇使用实现XlsxWriter创建Excel文件并编辑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Cpython3.9源码解析python中的大小整数

    Cpython3.9源码解析python中的大小整数

    这篇文章主要介绍了Cpython3.9源码解析python中的大小整数,在CPython中,小整数对象池是一种优化机制,用于减少对常用小整数的内存分配和销毁开销,需要的朋友可以参考下
    2023-04-04
  • Python中str.join()简单用法示例

    Python中str.join()简单用法示例

    这篇文章主要介绍了Python中str.join()简单用法,结合实例形式分析了Python中str.join()用于连接生成新字符串的相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • Python填充任意颜色,不同算法时间差异分析说明

    Python填充任意颜色,不同算法时间差异分析说明

    这篇文章主要介绍了Python填充任意颜色,不同算法时间差异分析说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python强制子类重写父类的两种方法实现

    Python强制子类重写父类的两种方法实现

    在Python中,有时候我们希望某个类能够被子类继承并重写其中的某些方法,本文主要介绍了Python强制子类重写父类的两种方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • python排列组合库itertools的具体使用

    python排列组合库itertools的具体使用

    排列组合是数学中必不可少的一部分, Python 提供了itertools库,该库具有计算排列和组合的内置函数,本文主要介绍了python排列组合库itertools的具体使用,具有一定的参考价值,感兴趣的可以了解下
    2024-01-01
  • python设置环境变量的作用和实例

    python设置环境变量的作用和实例

    在本篇文章里小编给各位整理了关于python设置环境变量的作用和实例内容知识点,需要的朋友们学习参考下。
    2019-07-07
  • 详解python 支持向量机(SVM)算法

    详解python 支持向量机(SVM)算法

    这篇文章主要介绍了python SVM算法的相关资料,帮助大家更好的利用python进行数据分析,感兴趣的朋友可以了解下
    2020-09-09
  • Python如何合并多个字典或映射

    Python如何合并多个字典或映射

    这篇文章主要介绍了Python如何合并多个字典或映射,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 打包python 加icon 去掉cmd黑窗口方法

    打包python 加icon 去掉cmd黑窗口方法

    今天小编就为大家分享一篇打包python 加icon 去掉cmd黑窗口方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06

最新评论