Django: 路由与视图 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

路由表分拆

Django的定位是开发大中型应用程序,因此很合理地,要解决路由表拆分 的问题,比如不同开发组分别承担自己那部分的路由表设计。

例如,信用卡开发组将信用卡部分的路由单独定义在路由表credit_urlpatterns 中,当最终集成各个开发组的路由时,使用include(sub_urlpatterns)方法就可以 把其他路由表引入进来。

route-split

路由解析树

你可能注意到,引入子路由表也是使用url()方法,只是第二个参数从视图函数 变更成一个include()调用。事实上url()只是个语法糖,它的作用仅仅是 使路由表看起来更整洁一些。

url()函数自动判断了第二个参数的类型并做出了区别对待。

当使用视图函数作为参数调用url()方法时,创建的是一个RegexPattern对象, 而当使用include()返回值作为参数调用url()方法时,创建的则是一个 RegexResolver对象。

这使得基于根路由表urlpatterns创建的路由解析器看起来像一棵树:

resolver-tree

你可以自行脑补一下,对URL/credit/report/的处理,是如何使用这棵树完成的。

修改示例代码:

1. 创建一个新的子路由表mail_urlpatterns,内容自定

2. 将其挂接到根路由表中/mail/前缀下

3. 使用路由解析器测试你创建的子路由