Django正则URL匹配实现流程解析

Oliver
Oliver
发布时间:2026-10-14| 5人浏览过
原创

本文解析Django中通过正则表达式配置URL匹配的方法,对比传统动态URL与静态URL在SEO上的差异。详细演示如何利用re_path实现顺序传参(*args)与关键字传参(**kwargs),并说明后者在参数位置变换时的稳定性优势,帮助开发者优化路由配置。

Django正则URL匹配实现流程解析

一、引子

在day17的作业环节中,查看主机详细信息时,我们采用在URL中拼接参数的方式。对应的URL配置为匹配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)中被视为动态页面,而新的静态URL格式则被视为静态页面。这种区别可能在进行搜索优化时带来一定优势。

Django正则URL匹配实战示例

二、开搞栗子

暂时忽略数据库操作,先在views模块中创建一个用户字典用于测试。

2.1 动态页面的栗子

views代码:


info_dic={
  1:{"name":"zhangsan","email":"zhangsan@163.com","age":22},
  2:{"name":"lisi","email":"lisi@163.com","age":27},
  3:{"name":"wangwu","email":"wangwu@163.com","age":29},
  4:{"name":"laoliu","email":"laoliu@163.com","age":30},
  5:{"name":"chenpi","email":"chenpi@163.com","age":32},
}

def index(request):
  return render(request,"index.html",{"info_dic":info_dic})


def detail(request):
  nid=request.GET.get("nid")
  print(nid,type(nid))
  info=info_dic.get(int(nid))
  print(info)
  return render(request,"detail.html",{"info":info})

urls配置

前端index.html页面:


<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>用户信息</h1>

  <ul>
    {% for k,v in info_dic.items %}
      <li><a target="_blank" href="/detail/?nid={{ k }}" rel="external nofollow" >{{ v.name }}</a></li>
    {% endfor %}

  </ul>
</body>
</html>

前端detail页面:


<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>用户详细信息</h1>

  <ul>
    <li>name:{{ info.name }}</li>
    <li>email:{{ info.email }}</li>
    <li>age:{{ info.age }}</li>
  </ul>
</body>
</html>

运行结果:

2.2 下面使用正则表达式进行URL匹配,实现静态页面效果:

urls配置:

views视图函数:

直接在函数定义中通过形参nid接收参数,无需像之前那样从request.method中手动提取。

运行结果:

上述示例表明,参数是通过函数形参传递的,类似于定义函数时的位置参数。

接下来再举一个例子进行验证:

当参数位置发生变换后,获取到的数值也随之改变。

Django URL分组传参技巧

三、分组传参

在上述示例中,如果不进行分组,参数就像函数的位置参数一样,依赖顺序,灵活性较差。

显然,这种方式在实际调用中并不方便。因此,如果使用关键字参数,就需要在URL匹配中进行分组处理。

下面通过示例验证,即使交换nid和uid的位置,打印结果保持一致。

位置参数可以通过*args获取,而关键字参数则通过**kwargs获取。

Django正则URL匹配总结

四、总结

路由系统: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接收参数,推荐使用此方式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。